programing

ARC를 사용하도록 프로젝트를 변환할 때 "스위치 케이스가 보호 범위 내에 있다"는 것은 무엇을 의미합니까?

magicmemo 2023. 4. 26. 23:11
반응형

ARC를 사용하도록 프로젝트를 변환할 때 "스위치 케이스가 보호 범위 내에 있다"는 것은 무엇을 의미합니까?

ARC를 사용하도록 프로젝트를 변환할 때 "스위치 케이스가 보호 범위 내에 있다"는 것은 무엇을 의미합니까?Xcode 4 Edit -> Refactor -> Objective-CARC로 변환...을 사용하여 ARC를 사용하기 위한 프로젝트를 변환하고 있습니다.스위치 케이스의 "일부" 스위치에서 "스위치 케이스가 보호 범위 내에 있습니다"라는 오류가 발생합니다.

편집, 코드는 다음과 같습니다.

오류는 "기본" 대소문자에 표시됩니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"";
    UITableViewCell *cell ;
    switch (tableView.tag) {
        case 1:
            CellIdentifier = @"CellAuthor";
            cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        cell.textLabel.text = [[prefQueries objectAtIndex:[indexPath row]] valueForKey:@"queryString"];
        break;
    case 2:
        CellIdentifier = @"CellJournal";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        cell.textLabel.text = [[prefJournals objectAtIndex:[indexPath row]] valueForKey:@"name"];

        NSData * icon = [[prefJournals objectAtIndex:[indexPath row]] valueForKey:@"icon"];
        if (!icon) {
            icon = UIImagePNGRepresentation([UIImage imageNamed:@"blank72"]);
        }
        cell.imageView.image = [UIImage imageWithData:icon];

        break;

    default:
        CellIdentifier = @"Cell";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
        break;
    }


    return cell;
}

각 케이스 자체를 중괄호로 둘러쌉니다.{}그러면 문제가 해결될 것입니다(제 프로젝트 중 하나에서 저에게 해당됨).

코드를 보지 않고는 확신하기 어렵지만, 이것은 아마도 스위치 내부에서 어떤 변수 선언이 진행되고 있고 컴파일러가 필요한 할당 해제 지점에 대한 명확한 경로가 있는지 알 수 없다는 것을 의미합니다.

이 문제를 해결하는 쉬운 두 가지 방법이 있습니다.

  • 변수를 선언하고 있을 수 있습니다.변수 선언을 switch 문 밖으로 이동합니다.
  • 괄호 {} 사이에 전체 대소문자 블록 삽입

컴파일러는 변수를 릴리스할 때 코드 줄을 계산할 수 없습니다.이 오류를 발생시킵니다.

이전의 모든 사례에 {}을(를) 포함해야 하는 경우를 제외하고는 스위치 중간에서 문제가 시작되어 대괄호를 묶지 않았습니다.나에게 오류는 내가 진술서를 가지고 있을 때 발생했습니다.

NSDate *start = [NSDate date];

앞의 경우에는이 항목을 삭제한 후 보호 범위 오류 메시지에서 모든 후속 사례 설명이 삭제되었습니다.

이전:

    case 2:
        NSDate *from = [NSDate dateWithTimeIntervalSince1970:1388552400];
        [self refreshContents:from toDate:[NSDate date]];
        break;

NSDate 정의를 전환하기 전에 이동했더니 컴파일 문제가 해결되었습니다.

NSDate *from;  /* <----------- */
switch (index) {
    ....
    case 2:
        from = [NSDate dateWithTimeIntervalSince1970:1388552400];
        [self refreshContents:from toDate:[NSDate date]];
        break;

}

스위치 외부에서 변수를 선언한 다음 케이스 내부에서 인스턴스화합니다.Xcode 6.2를 사용하는 경우 완벽하게 작동했습니다.

default:
        CellIdentifier = @"Cell";
        cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            ***initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];***
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            }
        break;
    }

참고: 확인!굵고 기울임꼴로 표시된 선의 구문입니다.그것을 고치면 당신은 가도 좋습니다.

중괄호로 둘러쌉니다.{}사례 진술과 각 사례의 구분 사이의 코드.제 코드에 효과가 있었어요.

언급URL : https://stackoverflow.com/questions/7562199/when-converting-a-project-to-use-arc-what-does-switch-case-is-in-protected-scop

반응형