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;