我有更多的概念问题而不是基于代码的问题,因为我的代码有效。
当我的应用程序启动时,我从 coreData 获取 sessionObject 并验证 authToken。
此代码在我的加载控制器中有效。Fetch 请求有效并返回一个 sessionObjects 数组。但是,在我验证 authToken 的 App Delegate 中,返回的数组为空。为什么代码在控制器中有效,而在 App Delegate 中无效?提取请求没有错误。上下文不是零。这是我在加载控制器中使用的确切代码并且有效。
我是否必须在 App Delegate 中对 CoreData 执行不同的请求?我可以在 App Delegate 中使用获取请求吗?
应用程序 Delegate DidBecomeActive 方法中的示例代码。我使用 DidBecomeActive 所以我们可以验证从后台和初始化返回。
// check for valid authtoken if present so the correct home screen will display
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CurrentSession" inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];
CurrentSession *sessionObj = nil;
NSError *cdError = nil;
if([self managedObjectContext] == nil){
NSLog(@"context is nil");
}
NSArray *sessionArray = [[[self managedObjectContext] executeFetchRequest:request error:&cdError] mutableCopy];
if (sessionArray != nil && [sessionArray count]) {
sessionObj = (CurrentSession *)[sessionArray lastObject];
NSLog(@"Found session %@",sessionObj.authToken);
if (![sessionObj.authToken isEqualToString:@""]) {
[Solid_Utilities validateAuthToken:[self managedObjectContext]];
}
} else {
NSLog(@"NO SESSION FOUND");
}
编辑 我确定我的问题可能与线程有关。在加载控制器中,我在单独的线程上运行了很多任务,并且我假设 App Delegate 在主线程上运行。但是,我提供给加载控制器的上下文是在应用程序委托中生成的。
编辑 我在 App Delegate 和 Loading 控制器中做了一个 isMainThread 检查,结果都是真的。不知道为什么如果他们使用相同的上下文并存储他们不会返回相同的对象数组。