Stackmob 不执行 fetch 请求而没有任何错误

Posted

技术标签:

【中文标题】Stackmob 不执行 fetch 请求而没有任何错误【英文标题】:Stackmob does not execute fetch request without any errors 【发布时间】: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 没有被执行?

【问题讨论】:

【参考方案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);
 ];

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

【讨论】:

以上是关于Stackmob 不执行 fetch 请求而没有任何错误的主要内容,如果未能解决你的问题,请参考以下文章

StackMob 本地核心数据存储

如何在fetch then / response函数中访问请求对象

如何在本地使用 fetch 从客户端向服务器发出请求而不会得到不透明的响应?

React Native 网络请求封装:使用Promise封装fetch请求

XMLHttpRequest 成功,而 fetch 被阻止

不相关实体的CoreData Fetch Predicate