【问题标题】:Stackmob does not execute fetch request without any errorsStackmob 不执行 fetch 请求而没有任何错误
【发布时间】:2014-02-13 10:09:52
【问题描述】:

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

我将在多个控制器中需要此方法,因此我已将其移至它自己的类中。但是,当我将以下方法从控制器移动到另一个类 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 没有被执行?

【问题讨论】:

    标签: ios objective-c stackmob


    【解决方案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);
     }];
    

    }

    现在,当您调用此函数时,您可以在完成时使用您的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多