При преобразовании проекта для использования ARC, что означает «случай переключения находится в защищенной области»? Я преобразовываю проект для использования ARC, используя Xcode 4 Edit -> Refactor -> Convert to Objective-C 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;
}
{...}
послеcase
и передbreak
, все внутри находится в блоке с областью видимости и будет вести себя как ожидалось. Я дошел до того, что просто автоматически блокирую своиcase
высказывания, чтобы избежать подобных проблем.Трудно быть уверенным, не глядя на код, но это, вероятно, означает, что внутри коммутатора происходит некоторое объявление переменной, и компилятор не может определить, существует ли четкий путь к требуемой точке освобождения.
источник
Есть 2 простых способа решить эту проблему:
Компилятор не может вычислить строку кода, когда переменные должны быть освобождены. Вызывает эту ошибку.
источник
Для меня проблема началась с середины коммутатора, и фигурные скобки не сработали, если только вы не включили {} IN ALL предыдущие операторы case. Для меня ошибка пришла, когда у меня было утверждение
в предыдущем случае. После того как я удалил это, все последующие инструкции case были очищены от сообщения об ошибке защищенной области
источник
Перед:
Я передвинул определение NSDate до switch, и это исправило проблему компиляции:
источник
Объявите переменные вне коммутатора, а затем создайте их экземпляр в кейсе. Это отлично работает для меня, используя Xcode 6.2
источник
Примечание: проверьте! Синтаксис жирной и курсивной линии. Исправьте это, и вы готовы идти.
источник
Окружите скобками
{}
код между оператором case и разрывом в каждом случае. Это сработало в моем коде.источник