ios - Stackmob 不会在没有任何错误的情况下执行提取请求

标签 ios objective-c stackmob

我正在尝试执行获取请求以返回“锻炼”用户对象。

我将在多个 Controller 中需要此方法,因此我已将其移至它自己的类中。但是,当我将以下方法从 Controller 移动到另一个类时 onSuccessonFailure 永远不会执行 - 它只是返回一个空数组而没有任何错误。我试过将 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;

为什么 onSuccessonFailure 没有被执行?

最佳答案

当您的函数返回时,您的 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/

相关文章:

ios - 快速计算 txt/log 文件中的行数

ios - ios中nsurlconnection中的post方法

ios - UIView 的 viewDidLoad?

java - 在Android中从StackMob查询(匿名内部类)中提取对象的正确方法

ios - Stackmob 与 Facebook 离线同步

iphone - 当内存警告不足时,通过界面构建​​器添加的 View 会发生什么情况?

ios - 在 TabBarController 中添加 View Controller 作为带有导航栏的 subview

iOS : how to launch app automatically

iphone - 如何获得小数点符号?

具有高级标签方案的精益副项目后端平台