2011-12-25 6 views
1

私はAutomatic Reference Counting-ARCを使用します。バックグラウンドで保存を実行してUIを中断しないようにします。 @autoreleasepoolコンストラクタを使用しようとしましたが、間違って配置されている可能性があります。以下のエラーを回避するために、このコードをどのように変更する必要がありますか?ありがとう。performSelectorInBackgroundは「自動リースされたプールなし」エラーを返します

2011-12-25 22:04:41.177 MakeMyDay[1106:5f5f] *** __NSAutoreleaseNoPool(): Object 0x102210 of class NSCFString autoreleased with no pool in place - just leaking 


-(void)beginAutoSave { 
    if (saveTimer==nil) { 
     NSLog(@"Begin Autosave"); 
     saveTimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(saveInBackground) userInfo:nil repeats:YES];      
    } 
} 


-(void)saveInBackground { 
     [self performSelectorInBackground:@selector(save) withObject:nil]; 
} 

- (void)save 
{  
    [wrapper setObject:currentVersion forKey:@"version"]; 
    if (taskStore!=nil) [wrapper setObject:taskStore forKey:@"taskStore"]; 
    [NSKeyedArchiver archiveRootObject:wrapper toFile:[self dataFilePathNew]]; 
    NSLog(@"saved"); 
} 

答えて

5

あなたがautoreleasePoolブロックの内部メソッドを保存ラップ:

-(void)save { 

    @autoreleasepool { 

    [wrapper setObject:currentVersion forKey:@"version"]; 
    if (taskStore!=nil) [wrapper setObject:taskStore forKey:@"taskStore"]; 
    [NSKeyedArchiver archiveRootObject:wrapper toFile:[self dataFilePathNew]]; 
    NSLog(@"saved"); 

    } 

} 
+0

パーフェクト!今それは動作します! :-D – folium

関連する問題