2011-04-10 5 views
0

안녕하세요 여러분. 나는 ios-app를 쓰고 있는데, severals 서브 뷰가 포함되어있다. 서브 뷰는 버튼 하나만 누르면 개별적으로 생성 될 수있다. 모든 하위보기에는 '그룹'인스턴스가 있으며, 이는 핵심 데이터를 통해 저장된 엔터티입니다. '그룹'은 '연락처'와 일대일 관계입니다. 연락처가 하위보기로 끌면 주어진 '그룹'의 핵심 데이터에 저장됩니다. 이것은 정확히 3 번 정확하게 작동합니다. 매 4 시간마다 연락처가 다른 하위보기로 끌려 가고있는 중입니다. 앱이 충돌합니다. 여기 ios - 코어 데이터 : "엔티티 이름이 nil이 아니어야합니다"가 발생하는 이유는 무엇입니까?

코드입니다 :

- (void)fetchContacts { 
if(personRecordIDsArray==nil) { 
    personRecordIDsArray = [[NSMutableArray alloc] init]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:managedObjectContext]; 
    [request setEntity:entity]; 
    [entity release]; 

    NSError *error = nil; 
    NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease]; 
    if (mutableFetchResults == nil) { 
     // Handle the error. 
    } 
    [error release]; 
    [request release]; 
    for (Contact *contact in mutableFetchResults) { 
     if(contact.belongsToGroup == group) { 
      [personRecordIDsArray addObject:contact.recordId]; 
     } 
    } 
} 
NSLog(@"%d", [personRecordIDsArray count]);} 

- (void)addContactsToGroup:(NSArray*)arrayOfPeople { 
[self fetchContacts]; 
for(int i = 0; i<[arrayOfPeople count]; i++) { 
    ABRecordRef person = [arrayOfPeople objectAtIndex:i]; 
    NSNumber *personRecordId = [NSNumber numberWithInteger:ABRecordGetRecordID(person)]; 
    if(![self groupContainsContactWithRecordID:personRecordId]) { 
     NSString *compositeName = (NSString *)ABRecordCopyCompositeName(person); 
//Here is when the error occurs: 
     Contact *contact = (Contact*)[NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:managedObjectContext]; 
     contact.compositeName = compositeName; 
     contact.recordId = personRecordId; 
     contact.belongsToGroup = group; 
     NSError *error = nil; 
     if (![managedObjectContext save:&error]) { 
      NSLog(@"Error in addContactsToGroup!");} 
     [error release];  
     [personRecordIDsArray addObject:personRecordId]; 
    } 

}} 

오류가 말한다 그룹에 연락처 추가하려고 :

2011-04-10 16 : 16 : 207 : 796 36.152에서는 TestApp를 ] * 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱 종료 중, 이유 : '엔티티 이름이 nil이 아니어야합니다.'

나는 정말로 한동안 놀았고 또한 인터넷에서 비슷한 것을 찾을 수 없었다. 그것은 오류가 항상 연락처가 다른 하위보기에 추가됩니다 넷째 발생합니다 재밌 네요. 누구든지이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까?

#0 0x956e2156 in __kill 
#1 0x956e2148 in kill$UNIX2003 
#2 0x95774899 in raise 
#3 0x9578a9b8 in abort 
#4 0x91de4fda in __gnu_cxx::__verbose_terminate_handler 
#5 0x0141c4e7 in _objc_terminate 
#6 0x91de317a in __cxxabiv1::__terminate 
#7 0x91de31ba in std::terminate 
#8 0x91de32b8 in __cxa_throw 
#9 0x0141c635 in objc_exception_throw 
#10 0x00ce1486 in +[NSManagedObject(_PFDynamicAccessorsAndPropertySupport) classForEntity:] 
#11 0x00ce11f6 in _PFFastEntityClass 
#12 0x00d06e73 in +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:] 
#13 0x00009a02 in -[GroupViewController addContactsToGroup:] at GroupViewController.m:152 
#14 0x00002f31 in -[GrouperViewController dragingWillEnd:forContacts:atPosition:] at GrouperViewController.m:98 
#15 0x0000cbb8 in -[ContactsTableViewController longPressOnView:] at ContactsTableViewController.m:65 
+0

그건 당황입니다. – TechZen

+0

이상한! 당신은'insertNewEntityForName' 메쏘드에 캐스트 (Contact *) 할 수 있습니까? 나는 그것이 이전에 그런 방식으로 만들어지는 것을 보지 못했습니다. 그리고 심지어 그것은 일종의 의미를 지니고 있습니다, 당신은 정말로 그것을 필요로하지 않습니다. 어떤 차이가 있는지 확인하십시오. – Rog

답변

1

나는 문제가 관리되는 개체 컨텍스트를 만드는 관리 개체 모델에서 분리 될 것을 것을 추측하기 위하여려고하고있다 : 나는

및 디버거는 말한다 ... 아이디어에서 정말입니다 NSEntityDescription이 Contact 엔터티를 나타내는 클래스를 찾아 반환하는 것은 불가능합니다.

가장 큰 원인은 관리 대상 객체 컨텍스트를 초기화하는 것이지만 모델을 설정하지 않거나 모델을 nil로 설정하지 않는 것입니다. 실패한 호출을하기 전에 관리 객체 컨텍스트를 완전히 로깅하는 것이 좋습니다. 특히 모델에 로그를 남겨서 하나가 있는지 확인하고 동일한 콜을 호출 간 유지하십시오.