Khi chuyển đổi dự án để sử dụng ARC, "trường hợp chuyển đổi nằm trong phạm vi được bảo vệ" nghĩa là gì? Tôi đang chuyển đổi một dự án sử dụng ARC, sử dụng Xcode 4 Edit -> Refactor -> Convert to Objective-C ARC ... Một trong những lỗi tôi nhận được là "trường hợp chuyển đổi là trong phạm vi bảo vệ" trên "một số" của chuyển mạch trong trường hợp chuyển đổi.Khi chuyển đổi dự án để sử dụng ARC, "trường hợp chuyển đổi nằm trong phạm vi được bảo vệ" nghĩa là gì?
Chỉnh sửa, Đây là mã:
các ERROR được đánh dấu vào "mặc định" trường hợp:
- (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;
}
Wow! Nó đã làm việc! nhưng tại sao?! – Ali
Niềng răng giúp trình biên dịch hiểu phạm vi.Tôi biết GCC đã sử dụng để đưa ra cảnh báo nếu bạn khai báo một biến mới ở dòng đầu tiên của câu lệnh trường hợp không có dấu ngoặc ôm và video WWDC 2011 trên ARC đề cập đến một số thứ về các trường hợp kèm theo trong dấu ngoặc. Nếu bạn muốn biết lý do tại sao, hãy xem video đó — Tôi không thể nhớ ra đầu của tôi. – FeifanZ
Đã lâu rồi, nhưng tôi dường như đã nhớ điều gì đó trong tiêu chuẩn C không cho phép gán biến sau câu lệnh trường hợp vì mã không thực sự nằm trong một khối. Bằng cách thêm dấu ngoặc nhọn '{...}' sau 'case' và trước' break', mọi thứ bên trong nằm trong một khối scoped và sẽ hoạt động như mong đợi. Tôi đã nhận được đến mức tôi chỉ tự động tạo một khối trong các câu lệnh 'case' của mình để tránh loại vấn đề này. – Paul