【问题标题】:crash happens when NSMutableArray is returned?返回 NSMutableArray 时会发生崩溃吗?
【发布时间】:2010-03-16 08:38:33
【问题描述】:

我已经这样编码(该函数将被一次又一次调用),但返回的对象给出“BAD ACCESS”,NSLog 打印正确的字符串,但有时返回(我调用 一次又一次)给崩溃..任何帮助来改变这个代码,如果我删除“自动释放”方法,它工作正常

 - (NSMutableArray *)getAll:(NSString *)type
{
    NSLog(@"Type: %@", type);
    NSMutableArray *toReturn = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];

    rs = [db executeQuery:Query1];

    while ([rs next]) {
        [toReturn addObject:[rs stringForColumn:@"Name"]];
        NSLog(@"name: %@", [rs stringForColumn:@"Name"]);
    }

    [rs close];

    return toReturn;
}

【问题讨论】:

    标签: iphone


    【解决方案1】:

    您需要确保您的字符串在此期间没有被释放。尝试改变

        [toReturn addObject:[rs stringForColumn:@"Name"]];
    

        [toReturn addObject:[[rs stringForColumn:@"Name"] copy]];
    

    【讨论】:

    • 请再次查看我的 Q,我在 NSMutableArray 中使用了 Autorelease,我尝试使用复制,它给出了同样的崩溃
    • 我看不到自动释放池(您是否删掉了代码的某些部分?)并且我看不到副本。我在这里错过了什么吗?也许你想看看developer.apple.com/mac/library/documentation/Cocoa/Conceptual/…
    • 副本不存在,但我用于检查...我使用 NSMutableArray *toReturn = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];
    • 据我所知,唯一缺少的是复制添加到toReturn 的字符串。 hanno 是对的。
    • 我看到使用 copy 是答案,但是由于 toReturn 是一个数组,它不应该自动保留吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多