我正在使用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;
}
感谢任何帮助,谢谢
答案 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;
}