为什么NSIndexPath不起作用?

时间:2012-12-31 09:42:10

标签: iphone objective-c ios cocoa-touch uikit

我正在使用UITableView编写一个简单的演示:当选择一个单元格时,在单元格中显示一个勾号,最后选择的单元格将被取消选中,当在模拟器中运行时,选择一个单元格为第一次,如果选择另一个单元格,应用程序将被压碎没有任何日志信息,我不知道发生了什么。这是我在编码中所做的:

标题

#import <UIKit/UIKit.h>   
@interface ViewController2 : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
    NSIndexPath * oldIndexPath;
    NSArray *list;
}
@property(retain,nonatomic)NSIndexPath *oldIndexPath;
@property(strong,nonatomic)NSArray *list;
@end

实施

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];

    if(oldIndexPath == nil){
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    }else{
        UITableViewCell * oldCell = [tableView cellForRowAtIndexPath:oldIndexPath];
        oldCell.accessoryType = UITableViewCellAccessoryNone;
    }
    oldIndexPath = indexPath;
}

感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:1)

始终通过self.访问您的媒体资源,不要直接访问ivar。通过直接分配,您可以绕过访问器方法中使用的任何内存管理,并在以后使用该值时,它已被释放。

在当前版本的Xcode中,您不需要声明ivars来支持属性或使用synthesize。这可以防止您意外地直接访问ivars。

答案 1 :(得分:0)

试试这个,希望它能为你效劳。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


{

UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];


if(self.oldIndexPath != nil)

{

    UITableViewCell * oldCell = [tableView cellForRowAtIndexPath:self.oldIndexPath];
    oldCell.accessoryType = UITableViewCellAccessoryNone;
}

cell.accessoryType = UITableViewCellAccessoryCheckmark;



self.oldIndexPath = indexPath;

}