我正在尝试执行获取请求以返回“锻炼”用户对象。
我将在多个 Controller 中需要此方法,因此我已将其移至它自己的类中。但是,当我将以下方法从 Controller 移动到另一个类时 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
没有被执行?
最佳答案
当您的函数返回时,您的 self.fetchedRecordsArray 由于 block 的性质将始终为 nil。
尝试执行以下操作:
在 .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);
}];
现在当您调用此函数时,您可以使用您的结果来完成。
关于ios - Stackmob 不会在没有任何错误的情况下执行提取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21751091/