2013-10-06 2 views
3

안녕하세요, OSX에서 magicalRecord로 엔티티를 만드는 데 문제가 있습니다. NSManagagedSubclasses 등등. 내가 아래 applicationDidFinishLaunching이 코드 (나는 magicalRecord 2.2을 사용하고 있습니다) 실행할 때 :OSX에서만 마법 레코드가있는 엔티티 만들기 (+ entityForName :이 모델에서 '(null)'이라는 엔티티를 찾을 수 없습니다.)

[MagicalRecord setupCoreDataStack]; 
Person * person = [Person MR_createEntity]; 
person.name = @"alex"; 

을 나는 로그이 얻을 : 내가 IOS 프로젝트에서 동일한 코드를 실행하면

2013-10-06 18:01:54.320 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x7fff71a96238) -> Created Context UNNAMED 
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x7fff71a96238) Set Root Saving Context: <NSManagedObjectContext: 0x101924d00> 
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x7fff71a96238) Created Main Queue Context: <NSManagedObjectContext: 0x1001564a0> 
2013-10-06 18:01:54.321 TestMagicalRecord[7554:303] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x7fff71a96238) Set Default Context: <NSManagedObjectContext: 0x1001564a0> 
2013-10-06 18:01:54.322 TestMagicalRecord[7554:303] +entityForName: could not locate an entity named '(null)' in this model. 

그것은으로 실행 아무런 문제가 없다. OSX 용 샘플 코드를 찾으려고 노력했지만 행운이 없다.

Magical 레코드 Github 저장소의 Mac 샘플 코드에는 다른 리소스와 함께 실행하는 방법이 있습니까?

나는 그것의 간단한 해결책을 내기하지만 나는 작동하지 Docs/SO에서 아무것도 찾을 수 없습니다.

답변

2

당신도 알게 되듯이 이것은 Magical Record의 개발 부서에있는 버그입니다. 현상 분기의 2.2 버전에서는

MR_createEntity 생성되어야하는 물체의 단체명 결정하기 위해 다음 방법을 사용

+ (NSString *) MR_bestGuessAtAnEntityName 
{ 
    if ([self respondsToSelector:@selector(entityName)]) 
    { 
     return [self performSelector:@selector(entityName)]; 
    } 
    return NSStringFromClass(self); 
} 

을 실제로 (적어도 OS X 10.8) NSObject에서 entityName으로 응답하고 해당 메서드는 nil을 반환하는 을 호출합니다. 이에 대한 문서를 찾을 수 없으므로 내부적으로 문서화되지 않은 일부 메서드 일 수 있습니다.

는하지만 효과는 MR_bestGuessAtAnEntityName 반환 nil하고, 따라서

+ (id) MR_createInContext:(NSManagedObjectContext *)context 
{ 
    return [NSEntityDescription insertNewObjectForEntityForName:[self MR_bestGuessAtAnEntityName] inManagedObjectContext:context]; 
} 

오류 메시지가

 
+entityForName: could not locate an entity named '(null)' in this model. 

그래서이 마법 기록 버그가와 실패, 그리고 관리자들에게보고 가치가있다. NSObject (또는 NSManagedObject)이 iOS의 entityName에 응답하지 않기 때문에 버그가 OS X에서만 발생합니다.

0

모델 파일이 대상의 일부로 컴파일되고 있는지 확인하십시오. 프로젝트 탐색기에서 xcdatamodel 파일을 선택한 다음 inspector 영역에서이 파일이 속한 대상을 찾습니다. 또는 빌드 설정을 확인하고이 파일이 컴파일 파일 섹션에 있는지 확인할 수 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. xcdatamodel 파일이 대상에 추가되었습니다. DefaultContext는 nil이 아닙니다 (도움이되는 경우). – LogSig

0

문제는 제가 Github에서 올바른 Branch를 사용하지 않았고 Master Branch 대신 Development Branch를 가지고있었습니다! 이것이 바보 같은 실수를 저지른 다른 사람들을 도울 수 있기를 희망합니다 ...

0

Like Martin R!return NSStringFromClass(self);

잘 작동 : + (NSString *) MR_bestGuessAtAnEntityName

  • 에 의해 교체 :
    • 이동

      NSManagedObject+MagicalRecord.m
    • 찾기 방법을 파일로.