Stackmob не выполняет запрос выборки без каких-либо ошибок

Я пытаюсь выполнить запрос на выборку, чтобы вернуть пользовательский объект "тренировки".

Мне понадобится этот метод в нескольких контроллерах, поэтому я переместил его в его собственный класс. Однако, когда я перемещаю следующий метод из контроллера в другой класс onSuccess или же onFailure никогда не выполняется - он просто возвращает пустой массив без ошибок. Я пытался положить managedObjectContext в качестве параметра в случае, если это было что-то делать с этим.

managedObjectContext объявлен как:

 self.managedObjectContext = [[self.appDelegate coreDataStore] 
contextForCurrentThread];

Метод в классе объявлен как:

 -(NSArray*)getUserRecord:(NSManagedObjectContext *)managedObjectContext
{

NSFetchRequest *userFetch = [[NSFetchRequest alloc] initWithEntityName:@"User"];

[managedObjectContext executeFetchRequest:userFetch
                                     onSuccess:^(NSArray *results)
 {
     NSLog(@"Results %@", results);
     self.fetchedRecordsArray= [[NSMutableArray alloc] initWithArray:results];
     NSLog(@"Fetched Array %@", self.fetchedRecordsArray);
 }

                                     onFailure:^(NSError *error)
 {
     NSLog(@"DATABASE ERROR: %@", error);
     [[[UIAlertView alloc]initWithTitle:@"DATABASE ERROR" message:@"FATAL-unable to fetch workout object" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
 }];

return self.fetchedRecordsArray;

}

Почему нет onSuccess или же onFailure выполняется?

1 ответ

Решение

Когда ваша функция возвращает ваш self.fetchedRecordsArray всегда будет нулевым из-за природы блоков.

Попробуйте сделать следующее:

в файле.h объявить это так:

- (void)getUserRecordWithContext:(NSManagedObjectContext *)managedObjectContext
             success:(void (^)(NSArray * users))success
             failure:(void (^)(NSError * error))failure;

И реализация в.m файле:

 - (void)getUserRecordWithContext:(NSManagedObjectContext *)managedObjectContext
             success:(void (^)(NSArray * users))success
             failure:(void (^)(NSError * error))failure; 
{

NSFetchRequest *userFetch = [[NSFetchRequest alloc] initWithEntityName:@"User"];

[managedObjectContext executeFetchRequest:userFetch
                                     onSuccess:^(NSArray *results)
 {
     NSLog(@"Results %@", results);
     self.fetchedRecordsArray= [[NSMutableArray alloc] initWithArray:results];
     NSLog(@"Fetched Array %@", self.fetchedRecordsArray);
     success(results);
 }

                                     onFailure:^(NSError *error)
 {
     NSLog(@"DATABASE ERROR: %@", error);
     failure(error);
 }];

}

Теперь, когда вы вызываете эту функцию, вы можете использовать свои результаты в завершении.

Другие вопросы по тегам