NSMutableArray 中的 addObject 错误

addObject in NSMutableArray error

我正在尝试根据是否存在某些数据(即有 phone 号码或 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];
}

如有任何关于导致其崩溃的建议,我们将不胜感激。

几乎可以肯定它不是在第二次数组分配时崩溃,而是在第一次分配时崩溃,而且几乎可以肯定是由于初始化中的一个元素为 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 吗?可能没联系上?

似乎 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];
}