2013-11-24 3 views
0

코어 데이터에서 수행 한 가져 오기 결과에서 NSManagedObject 유형의 NSArray 객체가 반환됩니다. NSArray의 내용을 콘솔에 인쇄하여 쿼리 후에이를 확인할 수 있으므로 NSArray에 객체가 포함되어 있습니다. 내 문제는 그러나 내가 쿼리에서 검색 한 엔터티 형식의 개체를 사용하여이 배열을 통해 빠른 열거 형을 수행 할 수 없다는 것입니다. 내가 런타임에 무엇입니까 정확한 오류는 다음iOS의 코어 데이터에서 엔티티의 NSArray를 통해 빠른 열거를 수행 할 때 런타임 오류가 발생합니다.

for (MyEntityType *entityType in self.entityArray) { 
... 
} 

: 나는 심지어 루프에 대한 조건으로 나누기 때문에 실행하지 않고 사용하고 루프

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[My_Entity_Name countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0xa9f0090' 

내 실제 내가 배열 self.entityArray를 채우는 데 사용하는 명령을 가져 오는 것은 :

:

self.entityArray = [[Singleton sharedInstance] retrieveEntities:self.mainEntity.relationshipEntity.relationshipEntityId]; 

차례로,이 내 retrieveEntity 방법과 같은 방법입니다

- (NSArray *)retrieveEntities:(NSNumber *)relationshipEntityAttributeId { 

    NSManagedObjectContext *context = [[DataEngine sharedInstance] managedObjectContext]; 
    NSError *error; 

    // Create fetch request 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:ENTITY_NAME inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; 

    // Create predicate 
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"relationshipEntity.relationshipAttributeId == %@", relationshipEntityAttributeId]; 
    [fetchRequest setPredicate:pred]; 

    NSArray *items = [context executeFetchRequest:fetchRequest error:&error]; 
    if ([items count]>0) { 
     return items[0]; 
    } else { 
     return nil; 
    } 
} 

위의 오류가 발생하는 이유는 누구나 볼 수 있습니까?

미리 답변 해 주신 모든 분께 감사드립니다.

+0

추가 된 코드는 우리에게 알려지지 않은 retrieveEntity 메소드를 사용하기 때문에 실제로 도움이되지 않습니다 (글쎄, 적어도 나에게). –

+0

추가 방법을 포함하도록 코드를 업데이트했습니다. – syedfa

답변

0

오류 메시지의 내용은 다음과 같습니다.

당신은 클래스 My_Entity_Name이 있습니다. My_Entity_Name의 인스턴스는 self.entityArray 속성에 할당됩니다. for (MyEntityType *entityType in self.entityArray)을 수행하면 -countByEnumeratingWithState:objects:count: 메시지가 인스턴스로 전달되고 인식 할 수없는 선택기 오류가 발생합니다.

self.entityArray이 나쁜 값을 얻는 방법을 알아 내기 위해 값이 할당 된 장소 (self.entityArray = … 또는 [self setEntityArray:…])를 찾습니다. 아마도 당신은 가져 오기를하는 방법이나 self.entityArray에 값을 할당 할 수있는 다른 방법이 있다면 게시해야합니다.


UPDATE는

나는 -[Singleton retrieveEntity:]가 무엇 확실하지 않다. 그것은 표준 프레임 워크의 일부인 클래스는 아니며 이러한 일반 이름 지정을 사용하는 제 3 자 라이브러리에 대해서는 알지 못합니다.

내가 말할 수있는 것은 메서드 이름 -retrieveEntity:을 기반으로하면 개체 배열이 아닌 단일 개체를 반환하는 것처럼 보입니다. 일반적으로 배열을 반환하는 메서드는 복수형이므로 -retrieveEntities:과 같은 이름을 사용할 것으로 예상됩니다.

self.entityArrayNSArray이 없기 때문에 예외가 있습니다. 메서드 이름은 배열을 반환하는 것처럼 보이지 않습니다.

[[Singleton sharedInstance] retrieveEntity:…]NSArray을 반환해야합니까? 아마도 -retrieveEntity:에 대한 코드를 게시해야합니다.


UPDATE는

당신은 배열을 반환하지 않습니다.

NSArray *items = [context executeFetchRequest:fetchRequest error:&error]; 
if ([items count]>0) { 
    return items[0]; 
} else { 
    return nil; 
} 

items 배열에 요소가 있으면 첫 번째 요소가 반환됩니다. 이것은 items[0]입니다.

당신은 배열로 변경 반환 할 경우 (전체 배열을 반환) return items;와 내가 return items[0];를 교체 한

NSArray *items = [context executeFetchRequest:fetchRequest error:&error]; 
if ([items count]>0) { 
    return items; 
} else { 
    return nil; 
} 

공지 사항 (배열의 첫 번째 요소를 반환).

+0

답변 해 주셔서 감사합니다. 가져 오기에서 배열을 채우는 방법을 보여주는 코드를 추가했습니다. – syedfa

+0

[Singleton retrieveEntity] 내 메소드를 호출하여 코어 데이터에서 결과를 검색하는 내 Singleton 인스턴스입니다. 나는 당신이 그 기능에 대해보다 정확하다고 제안 할 때 이름을 바꿨다. (즉, 복수 결과를 반환하기 때문에 복수로 만들었다.) 실제 가져 오기를 수행하는 방법도 포함했다. – syedfa

+0

이 오류가 발생하겠습니까? 내 배열에 단 하나의 객체 만 포함되어 있다면? NSLog를 수행하면 (@ "배열의 객체 수 : % d", [self.entityArray count]), 같은 결과를 얻었 기 때문에이 질문을 던지고 있습니다. 이 줄에 대한 오류 또한 – syedfa

0

코드에 오타가 있습니다. self.entityAray를 채우고 self.entityArray에서 그립니다. 어느 쪽이든 여기에 예제의 작은 오타가 있거나 오류를 설명합니다. 맞춤법 오류로 인해 self.entityArray를 찾을 수 없습니다. en은 NSInalidArgumentException을 throw합니다.

+0

지적 해 주셔서 고맙습니다. 질문을 올릴 때 내 부분에 오타가있었습니다. – syedfa