2011-10-14 6 views
0

백그라운드 프로세스에서 서버에서 여러 파일을 다운로드해야합니다. 여기는 NSOperationQueue입니다. 다운로드가 진행되는 동안 다운로드가 시작되면 유지해야합니다. &가 완료되었습니다. 이를 위해 핵심 데이터를 사용하고 있습니다. 다음 접근법을 사용했습니다. 각 파일에 해당하는 NSManagedObject이 있습니다. 다운로드 내가 NSOperationQueue를 사용하여 NSOpeartion을 동 기적으로 실행

  • NSOperation 하위 클래스가 there.Instance 내가 managedObject 예를 .IT 다음 NSOperationQueue에 추가됩니다 통과 각 파일에 대해 생성되는 "시작"으로 핵심 데이터 파일의 상태를 저장 시작입니다 그래서 전에

    1. .
    2. 그러면 NSOperation 하위 클래스의 main() 메서드에서 실제 파일 다운로드를 수행합니다.
    3. 다운로드가 완료되면 코어 데이터의 fiel 상태를 "Completed"로 저장합니다.

    이 하나의 파일에 대해 잘 작동합니다. 그러나 여러 파일에 대해 1 단계에서 4 단계의 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]; 
    } 
    

    나는 충돌 심지어 NSZombieEnabled을 설정하려고

    #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 
    

    로그하지만 너무 didnt가 도움이 다음있어 그것을 호출하는 방법이기 이 NSMangedObject 두 번째 반복에 대한 NSOperation 서브 클래스에 전달 파괴 어떤 객체가 넘쳐나는지 얻기 위해서

  • +0

    다운로드 상태를 추적하기 위해 핵심 데이터가 필요하지 않습니다. NSOperation의'execution'과'finished' 플래그를 체크하십시오. – Jano

    +0

    하지만 나도 다운로드해야하는 파일에 대해 NSMangedObject를 전달해야합니다. 기본적으로 그 객체는 파괴되고 있습니다. – Ritika

    답변

    0

    루프 밖에서 컨텍스트를 할당하고 그 후에 해제해야합니다.

    또한 개체를 유지하려면 save 컨텍스트가 필요합니다.

    관련 문제