需要协助使用已弃用的代码

时间:2013-10-11 21:57:55

标签: ios uitableview deprecated

这就是我现在的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSLog(@"index %d %d", indexPath.row, indexPath.section);
  BSTableViewCell *cell =
  (BSTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"StoryList"];
  if (cell == nil) {
    // Create a new cell. CGRectZero allows the cell to determine the appropriate size.
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                   reuseIdentifier:@"StoryList"] autorelease]; //***
    CGRect startingRect = CGRectMake(0.0, 0.0, 320.0, 60.0);
    cell =
    [[[BSTableViewCell alloc] initWithFrame:startingRect
                        reuseIdentifier:@"StoryList"] autorelease]; //***

但我在标记的行中收到以下错误:

  

/ Users / Alex / xCode Projects / FiveMins_1.2(WAV)/Classes/BSGameViewController.m:120:10:从'UITableViewCell *'分配给'BSTableViewCell *'的指针类型不兼容

第二个标记行的错误如下:

  

/ Users / Alex / xCode Projects / FiveMins_1.2(WAV)/Classes/BSGameViewController.m:120:38:'initWithFrame:reuseIdentifier:'不推荐使用:首先在iOS 3.0中弃用

我是新手,我有人帮我编程初始程序,但我该如何解决这些问题呢?

1 个答案:

答案 0 :(得分:1)

第一个错误很简单。不要创建UITableViewCell,创建一个自定义单元格:

cell = [[[BSTableViewCell alloc] initWithFrame:CGRectZero
                               reuseIdentifier:@"StoryList"] autorelease];

第二个错误也是如此。不要使用initWithFrame:reuseIdentifier:。使用initWithStyle:reuseIdentifier:代替,并在自定义单元类中实现该初始化程序。

如果您正在使用故事板并为表视图提供单元标识符,则可能甚至不再需要if(cell == nil)块。在这种情况下,dequeueReusableCellWithIdentifier总是提供一个有效的单元格,即使它需要创建一个单元格。

我发现您的代码中有自动释放调用。您应该做的第一件事是在代码上运行ARC转换。 ARC很棒,消除了人们代码中95%以上的内存错误。