簡體   English   中英

NSArray中的EXC_BAD_ACCES

[英]EXC_BAD_ACCES in NSArray

在出現“線程1:EXC_BAD_ACCES(code = 2,adress = 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;
    }

您的lijstArray getter函數是無限遞歸的。 假設lijstArray是@property,則每次使用self.lijstArray您都在調用實例方法lijstArray如果用作getter)或setLijstArray如果用作setter)。

您正在使用self.lijstArray三次。 賦值運算符左側的第一個用法是僅調用[self setLijstArray: ... ]因此盡管這會踐踏_lijstArray iVar,但不會導致遞歸。

您可以在兩個地方進行遞歸,盡管一次就足夠了。 首先是[self.lijstArray addObject: ... ][[self lijstArray] addObject: ... ] 這將導致無限遞歸。

然后使用return self.lijstArrayreturn [self lijstArray]相同-lijstArray實例方法再次調用自身。 這也會導致無限遞歸。

順便說一句,堆棧跟蹤將提供信息-您將擁有一個非常深的堆棧。

檢查以確保該行:

self.details[@"list"]; 

不為null。 還要檢查以確保已分配並初始化了tempArray和lijstString。

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM