获得"线程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;
}
答案 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;
}