iphone - 滚动时 UITableView 应用程序崩溃

标签 iphone ios sqlite uitableview nsmutablearray

首先,请原谅我的英语。

我正在学习 iPhone SDK、Obj-C 并尝试制作 UITableView 应用程序。但是我的应用程序在滚动表格时崩溃了。我已搜索但无法解决我的问题,所以我将我的问题发布在这里并寻求您的帮助。

TMTMemberListTableViewController.h

@interface TMTMemberListTableViewController : UITableViewController
{
    NSMutableArray *familyMembers;
    sqlite3 *database;
}

@property (nonatomic, retain) NSMutableArray *familyMembers;

- (void) configureCell:(TMTFamilyMemberCell *)cell withFamilyMember:(TMTFamily *)member;

@end

TMTMemberListTableViewController.m

@interface TMTMemberListTableViewController (Private)
    - (void) loadMemberListFromDatabase;
@end

@implementation TMTMemberListTableViewController

@synthesize familyMembers;

- (void) loadMemberListFromDatabase
{
    familyMembers = [[NSMutableArray alloc] init];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"easycook.sqlite"];
    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "SELECT member_id from family";
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString *memberID = [NSString stringWithUTF8String:(char *) sqlite3_column_text(statement, 0)];
                TMTFamily *member = [[TMTFamily alloc] initWithMemberID:memberID database:database];
                [familyMembers addObject:member];
                [member release];
            }
        }
        sqlite3_finalize(statement);
    }
    else
    {
        sqlite3_close(database);
        NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.clearsSelectionOnViewWillAppear = NO;

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    [self loadMemberListFromDatabase];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [familyMembers count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //static NSString *MyIdentifier = @"MyIdentifier";

    TMTFamilyMemberCell *cell = (TMTFamilyMemberCell *)[tableView dequeueReusableCellWithIdentifier:nil];
    if (cell == nil)
    {
        cell = [[[TMTFamilyMemberCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    TMTFamily *member = [familyMembers objectAtIndex:indexPath.row];
    // Set up the cell
    [self configureCell:cell withFamilyMember:member];
    [member release];
    return cell;
}

- (void) configureCell:(TMTFamilyMemberCell *)cell withFamilyMember:(TMTFamily *)member
{
    cell.familyMember = member;
    cell.memberNameLabel.text = member.description;
}
- (void)dealloc
{
    NSLog(@"Dealloc");
    [familyMembers release];
    [super dealloc];
}

滚动表格时,我的应用程序崩溃并显示 EXC_BAD_ACCESS

[self configureCell:cell withFamilyMember:member];

cell.memberNameLabel.text = member.description;

最佳答案

这一行没有递增保留计数器: TMTFamily *member = [familyMembers objectAtIndex:indexPath.row]

所以下一行是你的问题 [成员(member)发布];

如果你不拥有它,你就不能释放它。要么像这样保留它: TMTFamily *member = [[familyMembers objectAtIndex:indexPath.row] retain];

TMTFamily *member = [[familyMembers objectAtIndex:indexPath.row] copy];

或完全删除提到的 release

关于iphone - 滚动时 UITableView 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210496/

相关文章:

iphone - 我在 json 中发送字典,它有两个数组和多个值,但我收到响应访问被拒绝

ios - 滚动条没有到达 tableview 的末尾

ios - 在 UINavigationBar 中更改后退按钮文本的垂直位置

ios - 如何检测何时单击中间耳机按钮

iphone - 通知图标

iphone - 如何在 Iphone 中播放原始音频? (使用 ffmpeg)

ios - 编译时不包括 Prefix.pch

r - 我可以使用 R 中的 DBI 库将一个 SQLite 数据库附加到另一个数据库吗?

SQL 子查询优化

java - 如何使用 beans 将值插入到 sqlite 数据库中并将这些表值检索到 json 数组中