gpt4 book ai didi

ios - CoreData 获取请求返回空数组

转载 作者:行者123 更新时间:2023-12-01 22:48:01 24 4
gpt4 key购买 nike

我有更多的概念问题而不是基于代码的问题,因为我的代码有效。

当我的应用程序启动时,我从 coreData 获取 sessionObject 并验证 authToken。

此代码在我的加载 Controller 中有效。 Fetch 请求有效并返回一个 sessionObjects 数组。但是,在我验证 authToken 的 App Delegate 中,返回的数组为空。为什么代码在 Controller 中有效,而在 App Delegate 中无效?提取请求没有错误。上下文不是零。这是我在加载 Controller 中使用的确切代码并且有效。

我是否必须在 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");
}

编辑
我确定我的问题可能与线程有关。
在加载 Controller 中,我在单独的线程上运行了很多任务,并且我假设 App Delegate 在主线程上运行。
但是,我提供给加载 Controller 的上下文是在应用程序委托(delegate)中生成的。

编辑
我在 App Delegate 和 Loading Controller 中进行了 isMainThread 检查,两者都返回为真。不知道为什么如果他们使用相同的上下文并存储他们不会返回相同的对象数组。

最佳答案

看起来答案与我遇到的另一个问题有关。原来原始开发人员将核心数据堆栈添加到基本 Controller 中,我在应用程序委托(delegate)中使用堆栈并将其传递给基本 Controller 。基本 Controller 会用自己的堆栈覆盖我的上下文,这就是为什么我无法在应用程序委托(delegate)中获得预期的获取结果。

我会说从我在这个项目中学到的知识是在应用程序委托(delegate)中创建上下文并将其传递给您的第一个 Controller 。然后在 prepareForSegue 或当您手动推送时传递上下文。同样在 View 中会消失,您检查是否返回并更新商店上下文。如果您执行任何多线程,请确保在应用程序委托(delegate)中您的上下文是 nsmainconcurrencytype,以便您可以为其他线程创建子上下文。这将保持数据结果符合预期并将冲突降至最低。

感谢您对此的所有意见。你的回答帮助我找到了这个愚蠢的问题。

关于ios - CoreData 获取请求返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com