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

时间:2014-02-13 10:09:53

标签: ios objective-c stackmob

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

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

1 个答案:

答案 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);
 }];

}

现在,当您调用此功能时,您可以在完成时使用结果。

相关问题