iPhone错误:线程1:程序收到信号:“SIGABRT”

时间:2012-01-03 08:20:55

标签: iphone objective-c ios

我在应用程序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"
}

现在,在这一点上,我指出我得到一个错误,我的应用程序崩溃,有时它有效,有时它会给出错误。我不知道会出现什么问题。

2 个答案:

答案 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正确,你就搞砸了......但如果没有,那就意味着你没有正确初始化你的阵列。