2010-03-16 130 views
1

我有这样的代码(该函数将被一次又一次地调用),但返回的对象给出“不良访问”,NSLog打印正确的字符串,但有时候(我一次又一次地称为 )给出崩溃..任何有助于改变这一代码,如果我去掉“自动释放”的方法,它worsks精细当NSMutableArray返回时发生崩溃?

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

回答

1

你需要确保你的字符串不会在此期间释放。尝试改变

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

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

请参阅我的Q再次,我已经在使用的NSMutableArray自动释放, 我试图使用复制,它给出了同样的崩溃 – 2010-03-16 09:00:00

+0

我看不到一个自动释放池(你是否删除了部分代码?),我看不到副本。我在这里错过了什么吗?也许你想看看http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-CJBFBEDI – hanno 2010-03-16 09:21:18

+0

副本是不存在,但我用于检查...我用 NSMutableArray * toReturn = [[[[[NSMutableArray alloc] initWithCapacity:0] autorelease]; – 2010-03-16 09:43:09