2012-04-12 5 views
0

편집를 가져 오는 하나를 들어 내가 이런 종류의 인스턴스 방법을하지만 클래스 메서드해서는 안 생각!? 또 다른 한가지는 fetch 메소드를 C 클래스에 추가 한 것입니다. 관리 대상을 통해 데이터 저장소에 액세스 할 수 있다면 편리 할 것이라고 생각하지만, managedObjectContext, 지속성 등의 아이디어에 다소 반대한다고 생각하십니까?코어 데이터 : 카테고리 (코어 클래스의 확장)


내가하지 말아야 할 일을하고 있는지 잘 모르겠지만 여기에 있습니다.

난 (많은 행 B) 엔티티 B에 대한 관계를 갖는 엔티티 A와 데이터 모델을 갖는다. 데이터 저장소에 B 유형의 엔티티가 여러 개 있습니다. 이제는 유형 A의 엔티티를 여러 개 만들고 싶습니다. 그렇게하려면 유형 B의 엔티티에 대한 참조가 필요합니다. 즉, 데이터 저장소를 쿼리합니다. A B 카테고리에 다음과 같이 내가 즉, 수행

CoreData: error: Failed to call designated initializer on NSManagedObject class 'B' 

내가 통과하려고 :

#import "B+Helper.h" 

@dynamic managedObjectContext; 

@implementation B (Helper) 

- (Store *)getBByRef:(NSString *)ref 
{ 
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"B" inManagedObjectContext:self.managedObjectContext]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDescription]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"ref == %@", ref]; 
    [request setPredicate:predicate]; 

    NSError *error = nil; 
    NSArray *storeArray = [self.managedObjectContext executeFetchRequest:request error:&error]; 
    NSInteger bCount = [bArray count]; 
    if (bCount > 1 || bCount == 0) { 
     // Deal with error... 
    } else { 
     return [bArray objectAtIndex:0]; 
    } 
} 

자, 문제는 내가 제대로 managedObjectContext를 설정하는 것 같지 수 있다는 것입니다 --- 나는 오류 managedObjectContext AppDelegate에서 B 엔터티를 가져와야하는 클래스 C와 위에서 언급 한 메서드를 호출하기 전에 클래스 C에서 클래스 B + 도우미로 가져와야하지만 작동하지 않았습니다.

는 기본적으로, 난 그냥 일종의 UIViewController가 아닌 클래스에서, 간단한 NSObject 클래스 또는 NSManagedObject 확장, 즉에서 핵심 날짜 쿼리를 만들 수 있어야합니다.

B *b = [[B alloc] init]; 
b.managedObjectContext = self.managedObjectContext; 

을하지만 그때 나는 선택기가없는라는 오류 얻을 : 내가으로 한 클래스 C에서

은 다음

setManagedObjectContext:]: unrecognized selector sent to instance... 

내가 말이 희망을!

답변

0

정말, 대신 인스턴스 메소드와 카테고리를 만드는, 당신은 단지 생성 된 B 엔티티 클래스 구현 및 인터페이스에 이미 작성 방법을 추가해야합니다.

+ (Store *)getBByRef:(NSString *)ref; 

그리고 제대로 작동합니다.

+0

카테고리는 실제로 코어 데이터와 함께 사용하는 것이 좋습니다. 클래스 파일을 재생성해야하는 경우 메소드가 삭제되지 않기 때문입니다. 당신의 아이디어는 훌륭합니다. 단지 그 클래스 방법을 카테고리에 넣는 것입니다. – sosborn

+0

오른쪽, 재생성의 관점에서 카테고리는 훌륭합니다. –