Self в функции класса Обратитесь к классу правильно? - PullRequest
0 голосов
/ 10 мая 2011

Я хочу создать простую функцию, которая выполняет большую часть работы по извлечению данных из базовых данных

При

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

Я получил предупреждение компилятора о том, что

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

Но кого это волнует?Я знаю, что должен был вызвать [self class] fetchEntities, а не [self 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 Ответ

1 голос
/ 10 мая 2011

Проблема в том, что во время компиляции первого метода компилятор не знает о втором методе. Вы должны определить второй метод перед его вызовом, возможно, с закрытым интерфейсом, если методы не будут использоваться публично.

Поместите что-то подобное перед реализацией вашего класса, если вы хотите, чтобы метод был закрытым:

@interface <MyClassName> ()
   + (NSArray *)fetchEntities: (NSString *) entityForName sortKey: (NSString *) sortKey PredicateString: (NSString *)PredicateString;
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...