2011-05-10 3 views
0

은 내가 컴파일러 경고 말하고있어클래스의 자체 기능 클래스의 권리를 참조 하시겠습니까?

NSArray * FetchResult = [self fetchEntities: entityForName sortKey: sortKey PredicateString:PredicateString]; 

에서 핵심 데이터

을에서 데이터를 가져 얻으려고 노력의 다리 작업을 많이 할 간단한 함수를 만들려면 그

- (NSArray *)fetchEntities: (NSString *) entityForName sortKey: (NSString *) sortKey PredicateString: (NSString *)PredicateString is not found. 

하지만 누가 신경 써야합니까? 나는 [self fetchEntities ...]가 아닌 [self class] fetchEntities를 호출해야한다고 알고 있습니다.하지만 클래스 함수입니다. 자기는 이미 수업을 가리 킵니다. 문제가 무엇입니까?

+(NSManagedObject *)FirstfetchEntity: (NSString *) entityForName sortKey: (NSString *) sortKey PredicateString: (NSString *)PredicateString 
{ 
    NSArray * FetchResult = [self fetchEntities: entityForName sortKey: sortKey PredicateString:PredicateString]; 

    if ([FetchResult count]==0) 
    { 
     return nil; 
    } 
    else 
    { 
     return [FetchResult objectAtIndex:0]; //return the First 
    } 
} 

+(NSArray *)fetchEntities: (NSString *) entityForName sortKey: (NSString *) sortKey PredicateString: (NSString *)PredicateString 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 


    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init]autorelease]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityForName inManagedObjectContext:[self managedObjectContext]]; 
    [fetchRequest setEntity:entity]; 

    NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:sortKey ascending:NO]autorelease]; 
    NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortDescriptor, nil]autorelease]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:PredicateString]; 
    [fetchRequest setPredicate:predicate]; 

    NSError *error = nil; 
    NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error]; 
    if (fetchedObjects == nil) { 
     // Handle the error 
    } 

    return fetchedObjects; 
    [pool release]; 
} 

답변

1

문제는 단순히 첫 번째 방법이 컴파일 될 때 컴파일러가 두 번째 방법을 알지 못한다는 것입니다. 메서드를 공개적으로 사용하지 않을 경우 private 인터페이스를 사용하여 호출하기 전에 두 번째 메서드를 정의해야합니다. 당신이 방법은 개인이 될 할거야 경우 클래스 구현하기 전에이 같은

넣어 뭔가 :

@interface <MyClassName>() 
    + (NSArray *)fetchEntities: (NSString *) entityForName sortKey: (NSString *) sortKey PredicateString: (NSString *)PredicateString; 
@end 
+0

는 그것을 완료. 그러나 그것은 문제를 해결하지 못합니다. 어쨌든 문제는 후자라고 생각합니다. 어쩌면 잘못 입력 한 것일 수도 있습니다. –

+0

원래 항목에 실수를하였습니다. 이 방법은 정적으로 만들어야합니다. 나는 그것을 위에 고쳤다. – ThomasW

+0

또한 메서드를 선언하는 대신 두 번째 메서드의 구현을 첫 번째 메서드 앞에 넣기 만하면됩니다. 이 방법이 다른 곳에서 사용되지 않는 경우에 사용할 수 있습니다. – ThomasW

관련 문제