NSArray中的EXC_BAD_ACCESS

时间:2014-04-19 21:55:39

标签: ios objective-c exc-bad-access

获得"线程1:EXC_BAD_ACCESS(代码= 2,地址= 0xbf7fffffc)"错误

NSArray *tempArray ] [lijstString componentsSeperatedByString:@","];

我该怎么办?

这是整个代码部分:

-(NSMutableArray *)lijstArray{
NSString *lijstString = self.details[@"lijst"];
NSArray  *tempArray   = [lijstString componentsSeparatedByString:@", "];

self.lijstArray = [NSMutableArray array];
for (NSString *lijstValue in tempArray) {
    [self.lijstArray addObject:[lijstValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
}
    return self.lijstArray;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 2;
    }

3 个答案:

答案 0 :(得分:1)

你的lijstArray getter函数是无限递归的。假设lijstArray是@property,每次使用self.lijstArray时,如果用作getter,则调用实例方法lijstArray;如果用作setter,则调用setLijstArray

您正在使用self.lijstArray三次。赋值运算符左侧的第一个用法是只调用[self setLijstArray: ... ],这样会踩踏_lijstArray iVar,它不会导致递归。

你在两个地方引起递归,虽然一次就足够了。首先是[self.lijstArray addObject: ... ],与[[self lijstArray] addObject: ... ]相同。这会导致无限递归。

然后使用与return self.lijstArray相同的return [self lijstArray] - lijstArray实例方法再次调用自身。这也会导致无限递归。

顺便说一句,堆栈跟踪会提供信息 - 你的堆栈非常深。

答案 1 :(得分:0)

检查以确定该行:

self.details[@"list"]; 

不是空的。还要检查以确保正在分配和初始化tempArray和lijstString。

答案 2 :(得分:0)

试试这个:

-(NSMutableArray *)lijstArray{
    if(!_lijstArray){ //If you need get new lijstArray always, comment this line, and below "}"
        NSString *lijstString = self.details[@"lijst"];
        NSArray  *tempArray   = [lijstString componentsSeparatedByString:@", "];
        _lijstArray = [NSMutableArray array];
        for (NSString *lijstValue in tempArray) {
             [_lijstArray addObject:[lijstValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
        }
    }
    return _lijstArray;
}