我在应用程序delegate.h中定义了一个属性,并在delegate.m文件中对其进行了综合,使其成为全局属性,并从整个应用程序中分配并获取其值:
@property (strong, nonatomic) NSArray *accountsList;
在mainviewcontroller中,我将NSArray * accounts值分配给此全局值,如下所示:
((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList = accounts;
在pickerviewcontroller中,我将其值分配给另一个数组,如:
accountsArray = ((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList;
然后将其分配给选择器视图:
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
return [accounts count]; //Thread 1: Program received signal: "SIGABRT"
}
现在,在这一点上,我指出我得到一个错误,我的应用程序崩溃,有时它有效,有时它会给出错误。我不知道会出现什么问题。
答案 0 :(得分:2)
此处在您的代码中您收到 SIGABRT 。
首先,您将尝试了解 SIGABRT 背后的原因,您可以轻松修复 SIGABRT 。
我想告诉你, SIGABRT 基本上会出现很多原因。
1)当我们尝试访问deAllocated(已发布)实例/对象时
2)或将Release消息发送给已经deAllocated(已发布)的实例/对象。
3)还有更多......
因此,了解SIGABRT消息背后的确切原因。
您应该在环境变量中将 NSZombieEnabled 标记设置为 YES 。
你可以设置 NSZombieEnabled 如下
* * Product-> New Scheme-> Environment Variable
在环境变量下单击“+”按钮**
然后输入 NSZombieEnabled 并设置 YES 对应其标志值。
我希望它能帮助你解决SIGABRT问题。
答案 1 :(得分:0)
我有一个想法...制作一个方法来检查两个数组是否相等。像
这样的东西if ([(Appdelegate*).....delegate.array isEqualToArray:Accountslist]) {NSLog:(@"equal")}
如果NSLog正确,你就搞砸了......但如果没有,那就意味着你没有正确初始化你的阵列。