Self в классе Функция Обратитесь к классу вправо?

70
7

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


В


    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];
}

спросил(а) 2011-05-10T14:00:00+04:00 9 лет, 4 месяца назад
1
Решение
57

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


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

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

ответил(а) 2011-05-10T14:05:00+04:00 9 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема