Ios 当UITableView充满了地址簿中的信息向下滚动时,应用程序崩溃
我正在尝试在我的应用程序中实现一项功能,该功能要求我显示用户手机中包含电子邮件的所有联系人 我成功地从Ios 当UITableView充满了地址簿中的信息向下滚动时,应用程序崩溃,ios,objective-c,uitableview,exc-bad-access,addressbook,Ios,Objective C,Uitableview,Exc Bad Access,Addressbook,我正在尝试在我的应用程序中实现一项功能,该功能要求我显示用户手机中包含电子邮件的所有联系人 我成功地从通讯簿框架中检索到了相关联系人,并将信息保存在一个数组中。每个联系人包装在包装中,包含两个属性:fullName和email,这两个属性都是NSStrings 现在我已经在我的视图控制器中的一个表中填充了联系人数组,当该表是静态的,没有任何用户触摸或滚动时,一切都很棒,生活也很棒!但当我向下滚动显示更多联系人时,我会崩溃 崩溃 没有日志转储到控制台。我在tableView:cellForRowA
通讯簿
框架中检索到了相关联系人,并将信息保存在一个数组中。每个联系人包装在包装中,包含两个属性:fullName
和email
,这两个属性都是NSString
s
现在我已经在我的视图控制器中的一个表中填充了联系人数组,当该表是静态的,没有任何用户触摸或滚动时,一切都很棒,生活也很棒!但当我向下滚动显示更多联系人时,我会崩溃
崩溃
没有日志转储到控制台。我在tableView:cellForRowAtIndexPath:
中的一行上有一条绿线(与使用调试器断点时相同),上面写着以下内容:thread1:EXC\u BAD\u ACCESS(code=1,address=0x10d9eb4e)
我的调查
我强烈地引用了联系人数组。我已经检查了该数组的内容。并注意到用户可以看到的所有项目(大约11项)都是绝对有效的。所有字段与预期数据(全名和电子邮件)一致
另一方面,数组中的其余项似乎已损坏或其他内容。我可以看到这些项目的类型是nContactInfo
,它有两个属性:\u fullName
和\u email
——但即使这两个属性的类型是NSString
,内容也不是字符串,而是内存地址或其他东西(例如:0x114e2b3b0)
我注意到崩溃第一次发生在tableView:cellForRowAtIndexPath:
中,在那里我调用了nractinfo
属性之一,因此如果我从tableView:cellForRowAtIndexPath:
中删除对nractinfo属性的所有调用,并且只使用虚拟信息,那么一切都很好
所以我认为这与丢失从通讯录中检索到的信息有关。但我不知道为什么或者如何修复它
我给助手的一些代码(已编辑)
更新
为了清晰起见,我删除了代码中一些未连接/不必要的部分。我已经添加了NRContactInfo类的实现
下面是tableView:cellforrowatinexpath:
方法的代码片段,正如我前面解释的那样,该方法会崩溃
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"tableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
NRContactInfo *contact = contacts[indexPath.row];
cell.textLabel.text = contact.fullName; // <------ CRASHES HERE!
cell.detailTextLabel.text = contact.email;
return cell;
}
在编辑我的答案以使其更准确并包含有关我的问题的更多信息时,我注意到问题的根源: 在我的
nContactInfo
类中,我有两个属性,声明如下:
@property (nonatomic, assign) NSString *fullName;
@property (nonatomic, assign) NSString *email;
这就是奇怪的崩溃的原因。显然,即使我确信我有一个有效的引用这些属性,我没有
这就是解决我问题的方法:
@property (nonatomic, retain) NSString *fullName;
@property (nonatomic, retain) NSString *email;
感谢所有的帮助人员,对于所有其他人,请注意复制和粘贴sin:D您是否有显示您的问题的最小代码示例?@JesseRusak您所说的显示我的问题的代码示例是什么意思?使我的应用程序崩溃的代码?如果是的话,我已经提供了。我将编辑我的答案并澄清它。这似乎是NRContactInfo对象的NSString成员的某种引用计数问题。你能展示从AddresBook中检索联系人信息并创建NRContactInfo对象的代码吗?@goldengil你已经发布了一大堆代码,但我们无法知道问题出在哪里。例如,它可能在您的
nContactInfo
类中,甚至可能是深蓝灰。我要求的是一个最小的例子;请参阅@goldengil将其作为答案发布,不要忘记提及新旧属性限定符以及问题的简要说明,以便人们能够在功能中找到它。PS我希望您现在正在使用copy
D
@property (nonatomic, assign) NSString *fullName;
@property (nonatomic, assign) NSString *email;
@property (nonatomic, retain) NSString *fullName;
@property (nonatomic, retain) NSString *email;