2010-03-16 120 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