0

Xcode 5.02 및 iOS 7.04를 사용하고 있으며이 성가신 버그를 해결하기 위해 오랫동안 열심히 검색을 해왔으며 여러 시간 동안 디버깅을 한 후에도 여전히이 버그를 해결할 수 없습니다. 해제 된 인스턴스에 보낸 메시지 VERY WEIRD ERROR

그래서 나는

내보기 컨트롤러에서
+ (void)openDocument:(NSArray *)documentData { 
NSString *documentName = documentData[0]; 
CompletionBlock completionBlock = documentData[1]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory 
               inDomains:NSUserDomainMask] lastObject]; 
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName]; 

UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url]; 

void (^OnDocumentDidLoad)(BOOL) = ^(BOOL success) { 
    completionBlock(document); 
    preparingDocument = NO; 
}; 

if(!preparingDocument){ 
    preparingDocument = YES; 

    if(!([fileManager fileExistsAtPath:[url path]])){ 
     [document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForCreating 
      completionHandler:OnDocumentDidLoad]; 
    } else if(document.documentState == UIDocumentStateClosed){ 
     [document openWithCompletionHandler:OnDocumentDidLoad]; 
    } else if (document.documentState == UIDocumentStateNormal) { 
     OnDocumentDidLoad(YES); 
    } 
} else { 
    //Try till Document is Ready 
    [self performSelector:@selector(openDocument:) 
       withObject:documentData 
       afterDelay:0.5]; 
} 
} 

, 내 ManagedObjectContext에 액세스하기 위해이 헬퍼 클래스를 사용하여 내 데이터를 검색하기 위해 UIManagedDocument 도우미 클래스를 사용하고

- (void)updateContext{ 
[DocumentHelper openDocument:@[DOCUMENT_NAME, ^(UIManagedDocument *document) { 
    self.managedObjectContext = document.managedObjectContext; 
}]]; 
} 

이 updateContext 메소드는 일반적으로 새 항목 추가 또는 삭제와 같이 CoreData를 업데이트 할 때 호출되지만이 메서드는 (void) viewWillAppear 메서드 및 응용 프로그램이 포어 그라운드에있을 때 알림 블록에서도 호출됩니다 (Applic 사용 ATION 위임)

나는 배경에 응용 프로그램을 넣어 응용 프로그램을 다시 열 때마다

, 응용 프로그램이 충돌에 상관없이이 버그가 똑딱 어떤지

*** -[UIManagedDocument _setInConflict:]: message sent to deallocated instance 0x1701b0ae0 

내가 malloc을하고 NSZombie 프로필 관리자를 사용하는 말 없지만, 시한 폭탄. 이 오류는 응용 프로그램을 닫았다가 다시 열 때 임의의 횟수만큼 발생합니다.

+1

바로 ARC 코드입니까? 당신이 당신의 속성을 정의하는 방법을 보여줄 수 있습니까? –

+0

예 ARC 코드입니다. @property (비 원자력, 강함) NSManagedObjectContext * managedObjectContext; – liquidfired

+0

Xcode 5.0.2 및 iOS 7.0.4를 사용하고 있습니까? –

답변

2

오늘 같은 문제가 발생했습니다.

* - [UIManagedDocument _setInConflict는 :] : 메시지 0x1701b0ae0

이 메시지는 당신의 UIManagedDocument 인스턴스가 해제되었음을 나타냅니다 만에게 보낸 메시지를 데 할당이 해제 된 인스턴스로 전송. 필자는 프로젝트에서 문서 변수를 파일 수준 변수 (메서드 외부)로 선언하여 너무 빨리 공개하지 않고 사용을 마친 후에 만이를 nil로 설정하여이 문제를 해결했습니다.

질문에 답변 : 내 앱이 앱 위임의 iCloud 문서에서 확인하고 업데이트합니다. 내 AppDelegate.h 파일에서이 있습니다 :

@interface CSPAppDelegate : UIResponder <UIApplicationDelegate> { 
    BOOL iCloudAvailable; 
    NSMetadataQuery *_query; 
    CSPICloudDocument *doc; // <<< declare document variable here instead of in method 
} 

문서는 관련 메서드에서 인스턴스화됩니다. 코드와 내가하는 일의 유일한 차이점은 변수를 선언 한 부분입니다. 이것은 나를 위해 같은 오류를 해결하기에 충분했다.

+0

샘플 코드를 보여 주시겠습니까? – liquidfired

+0

답변 코드가 추가되었습니다. –

+0

정말 고마워요! 그것은 효과가있다! 또한 클래스 메서드를 사용하고 있었기 때문에 속성 대신 정적 문서를 만들었습니다. – liquidfired