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

问题描述:

我已经在应用程序delegate.h中定义了一个属性,并将其合成到delegate.m文件中以使其成为全局变量并从整个应用程序中获取其值:iPhone错误:线程1:程序接收到的信号:“SIGABRT”

@property (strong, nonatomic) NSArray *accountsList; 

在mainviewcontroller我的NSArray指定账户*值,这样这个全局值:

((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

你在哪个类中调用pickerview?因为你正在使用'[accounts count]',在你命名为'accountsArray'之前。那么你为什么不使用'return [accountsArray count];'? – Jules 2012-01-03 08:24:46

+0

accountsArray在主视图中用于检查是否有一个或多个帐户。并且帐户正在选取器视图帐户中使用,其中所有这些帐户都将显示在选取器视图中,以便用户选择他的帐户 – AppDeveloper 2012-01-03 08:31:25

+0

是否有可能在某个时刻发布了它?在numberofRows方法上返回nil不会使其崩溃,但将NULL传递给count方法会。 – CodaFi 2012-01-03 08:37:32

我有一个想法...做一个方法来检查两个数组是否相等。因此,像

if ([(Appdelegate*).....delegate.array isEqualToArray:Accountslist]) {NSLog:(@"equal")} 

如果的NSLog的正确,你就完蛋了......但是,如果没有,那么它只是意味着你没有正确初始化您的数组。

这里输入您的代码您收到的SIGABRT

所以,首先你试试就知道了原因,SIGABRT的背后,您可以轻松地修复指出SIGABRT

我想告诉,SIGABRT基本上发生了很多原因。

1),当我们试图访问解除分配(释放)实例/对象

2)或发送释放消息,释放已经(发行日期)实例/对象。

3)还有更多...

因此,对于了解背后SIGABRT消息的确切原因。

应设置在环境变量NSZombieEnabled标志,YES

您可以设置此NSZombieEnabled如下

* *产品 - >新方案 - >环境变量

在环境变量点击 “+” 按钮**

Then Type NSZombieEnabled and Set YES对应于其标志值。

我希望它会帮助你修复那个SIGABRT问题。