我正在尝试执行获取请求以返回“exercise”用户对象。
我需要在多个控制器中使用此方法,因此我将其移动到它自己的类中。但是,当我将以下方法从控制器移动到另一个类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
没有被执行?
答案 0 :(得分: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);
}];
}
现在,当您调用此功能时,您可以在完成时使用结果。