使用核心数据中的数组填充表视图

时间:2012-07-21 09:34:20

标签: iphone objective-c ios5 core-data

我尝试从核心数据中填充表格,并在此行显示错误

Tips *tipy = [arr objectAtIndex:indexPath.row];

这是我的.m文件

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return [arr count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[ UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    Tips *tipy = [arr objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [tipy tipdescription];
    cell.detailTextLabel.text = [tipy.tipnumber stringValue];

    return cell;
}

app和arr在.h文件中声明,并在.m文件中合成

@property (nonatomic, retain) AppDelegate *app;
@property(nonatomic, assign) NSArray *arr;

2 个答案:

答案 0 :(得分:5)

正如moxy所说,你应该写self.arr而不是arr。您已设置@property(nonatomic, assaign) NSArray *arr;您是否合成了这些属性?一定要这样做。并尝试@property(nonatomic, retain) NSArray *arr;而不是@property(nonatomic, assaign) NSArray *arr;。该组合不会增加保留计数,因此该值有可能被自动释放。不要忘记在dealloc中释放arr以避免内存泄漏。

答案 1 :(得分:0)

只是猜测,因为没有足够的代码可以检查,但NSManagedObjectContext的{​​{1}}确实会返回自动释放的executeFetchRequest:error:,而您的属性NSArray被定义为arr },而不是assign / strong =>您的retain已被释放且NSArray指向垃圾箱。也许这就是原因,但正如我所说,没有足够的代码可以确定。