2011-03-23 5 views
1

많은 Pages가있는 Journal NSManagedObject 하위 클래스가 있습니다. 이 사용자 지정 메서드를 (범주에서) 만든 순서대로 페이지 배열을 가져 왔습니다. 알다시피 매우 간단합니다. 어떤 이유로이 방법은 때로는 실패하고 난 self 객체에 EXC_BAD_ACCESS를 얻기 위해 관련 개체에 대한 Coredata, EXC_BAD_ACCESS 또는 이상한 동작

// 
// @returns an array of pages sorted by indexInJournal 
// 
- (NSArray*)sortedPages { 
    NSLog(@"Are we in main thread? %i", [NSThread isMainThread]); 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"indexInJournal" 
                   ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    NSArray *result = [[self.pages allObjects] sortedArrayUsingDescriptors:sortDescriptors]; 
    return result; 
} 

; 그것은 이상한 것입니다. 왜냐하면 저는 그것에 대한 방법을 실행하고 있기 때문입니다. NSZombieEnabled가 도움이되지 않았습니다.

다른 루틴에서 호출 된 경우이 메서드는 작동하지만 단일 페이지 (첫 번째 페이지) 만 반환합니다. 3 페이지가 있다고 확신합니다.

coredata istantiates/release objects에 내가 누락 된 것이 있습니까?

건배, 다비드

+0

페이지 관계에 계단식 삭제 규칙이 관련되어 있습니까? 그렇다면 sortedPages/Array 메소드에 페이지를 보내기 전에 어느 페이지도 isDeleted에 YES를 리턴하지 않도록하십시오. – Wienke

답변

0

문제점이 무엇인지 알아 냈습니다. 기본적으로 페이지를 만들 때 필자는 저널 페이지 세트에 페이지를 추가하고 풀어 놓았습니다. 따라서 NSManagedObject를 공개하지 않는다는 것을 알게되었습니다. 이것은 EXC_BAD_ACCESS를 생성 한 것입니다. 필요한 경우 페이지가 자동으로 만들어지기 때문에 감지하기가 약간 까다 롭습니다. 따라서 페이지를 추가하고 있다는 사실을 알지 못했습니다.

0

당신은 당신이 Journal 객체의 managedObjectContext와 같은 스레드에있는 또는 Journal 객체의 관계에서 Pages 개체를 찾을 수 없습니다 있는지 확인해야합니다.

크로스 스레드는 모든 종류의 문제를 일으 킵니다. 공상에 들기 전에 메서드가 단일 스레드에서 작동하는지 확인하십시오.