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);
}];
}
Теперь, когда вы вызываете эту функцию, вы можете использовать свои результаты в завершении.