NSMutableArray错误中的addObject

时间:2015-07-22 15:29:23

标签: ios objective-c xcode nsmutablearray

我正在尝试显示或隐藏您可以为联系人采取的操作的按钮,具体取决于是否存在某些数据,即有电话号码或facebookid。下面的代码编译但然后在buttonsToHide行崩溃。

NSMutableArray *buttonsToShow = [NSMutableArray arrayWithObjects:self.facebookButton,self.callButton, self.smsButton, self.emailButton, self.deleteButton, nil];   
NSMutableArray *buttonsToHide = [NSMutableArray array];

NSLog(@"Facbook id is:%@",self.contact.facebookID);

if (self.contact.facebookID == nil) {
    [buttonsToShow removeObject:self.facebookButton];
    //Following line crashes and shows up in green
    [buttonsToHide addObject:self.facebookButton];
}

欢迎任何有关导致其崩溃的建议。

2 个答案:

答案 0 :(得分:0)

它几乎肯定不会在第二个阵列分配上崩溃,但在第一个,并且崩溃几乎肯定是由初始化中的元素为nil引起的。

NSMutableArray *buttonsToShow;
if (self.facebookButton && self.callButton && self.smsButton && self.emailButton && self.deleteButton) {
    buttonsToShow = [NSMutableArray arrayWithObjects:self.facebookButton,self.callButton, self.smsButton, self.emailButton, self.deleteButton, nil];  
} else {
    buttonsToShow = [NSMutableArray array];
    NSLog(@"didn't initialize the array because placing nil objects in an array causes a crash");
} 

这些按钮是IBOutlets吗?可能没有联系起来?

答案 1 :(得分:0)

似乎self.facebookButton是零。如果它们是以编程方式编写的代码或连接到界面构建器中的视图,则验证它们是否已初始化。

以下代码可以避免崩溃。但您可能想要检查为什么self.facebookButton为nil并修复

if (self.contact.facebookID == nil && self.facebookButton) {
    [buttonsToShow removeObject:self.facebookButton];
    //Following line crashes and shows up in green
    [buttonsToHide addObject:self.facebookButton];
}