我必须在后台进程中从Server下载多个文件。
为此我使用NSOperationQueue
。在下载过程中,我需要在下载开始时进行维护。完成。为此我一直在使用Core Data。
我一直在使用以下方法:
每个文件都有NSManagedObject
。
NSOperationQueue
。NSOperation
子类的main()方法中执行实际的文件下载。这适用于单个文件。但对于多个文件,我执行for循环中的步骤1到4。
这个destroy NSMangedObject
传递给NSOperation
子类进行for循环的第二次迭代
这就是我称呼它的方式
for(NSManagedObject *objToDownload in objectArr){
NSManagedObjectContext *ctx = [[NSManagedObjectContext alloc] init];
[ctx setPersistentStoreCoordinator: [[[UIApplication sharedApplication] delegate] persistentStoreCoordinator]];
offlineManagerObj = [[OfflineFileManager alloc]initWithManagedObj:objToDownload delegate:self tempOfflineAccessPath:[objToDownload valueForKey:@"path"] objContext:ctx];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:offlineManagerObj];
[ctx release];
}
我收到了崩溃日志
#0 0x31b6b4b0 in ___forwarding___ ()
#1 0x31ae2180 in __forwarding_prep_0___ ()
#2 0x363b904e in -[_PFArray dealloc] ()
#3 0x363b6b80 in -[_PFArray release] ()
#4 0x31acd1a0 in CFRelease ()
#5 0x31acfeba in _CFAutoreleasePoolPop ()
#6 0x310ae1ca in -[NSAutoreleasePool release] ()
#7 0x370bff0e in _UIApplicationHandleEvent ()
#8 0x35bc0e76 in PurpleEventCallback ()
#9 0x31b3fa96 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#10 0x31b4183e in __CFRunLoopDoSource1 ()
#11 0x31b4260c in __CFRunLoopRun ()
#12 0x31ad2ec2 in CFRunLoopRunSpecific ()
#13 0x31ad2dca in CFRunLoopRunInMode ()
#14 0x35bc041e in GSEventRunModal ()
#15 0x35bc04ca in GSEventRun ()
#16 0x370ead68 in -[UIApplication _run] ()
#17 0x370e8806 in UIApplicationMain ()
#18 0x00002482 in main (argc=1, argv=0x2fdff494) at /Projects/iOS_Universal/main.m:14
我甚至尝试设置NSZombieEnabled
,但这也没有帮助我获得过度释放的对象
答案 0 :(得分:0)
你应该在循环之外分配上下文,并在之后释放它。
此外,如果您希望对象持久存在,则需要save
上下文。