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
'programing' 카테고리의 다른 글
디렉토리의 모든 SQL 파일 실행 (0) | 2023.04.26 |
---|---|
iOS 앱에서 Safari를 시작하고 URL을 여는 방법 (0) | 2023.04.26 |
std:: 문자열을 const char* 또는 char*로 변환하는 방법 (0) | 2023.04.21 |
SQL Server 2008 빈 문자열과공간 (0) | 2023.04.21 |
RichTextBox 문단 간격을 변경하려면 어떻게 해야 합니까? (0) | 2023.04.21 |