在我的项目中,我有一个Deprecations警告,initWithFrame:reuseIdentifier:已弃用
我不知道这是什么意思,有人可以告诉我如何解决这个警告 感谢
这是短代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// Set up the cell...
NSString *cellValue = [itemsList objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell;
}
并且警告就在那一行:
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
答案 0 :(得分:60)
Take a look at this Apple's page
此处红色突出显示的功能和属性将在未来的SDK中由Apple删除。
以便我们在创建App时避免使用它们。
因为我们需要能够在没有崩溃的情况下运行的长期项目。
不推荐使用的方法意味着它已被替换/退役但在当前版本的语言中仍然有效。应该避免它,并可能导致问题/错误。查看应列出您可以使用的替代方法的文档。
在这里你应该使用方法
- initWithStyle:reuseIdentifier:
然后你的if循环看起来像这样
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
答案 1 :(得分:9)
这个问题出现在Mark,Nutting和La Marche的Beginning IOS 5 Development中。有些读者可能会从第265页出现不推荐代码的那本书来到这里。他们可能认为错误是他们的!
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier: sectionsTableIdentifier] autorelease];
需要替换为(作为上述贡献者指出)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: sectionsTableIdentifier];
请注意,我已经删除了自动释放,因为自动引用计数不喜欢它!
希望这有帮助。
答案 2 :(得分:1)
使用此代码:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
答案 3 :(得分:0)
这可以解决您的问题:
static NSString *SimpleTableIdentifier;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier:SimpleTableIdentifier] autorelease];
}