iOS 设备上的核心日期获取请求

Posted

技术标签:

【中文标题】iOS 设备上的核心日期获取请求【英文标题】:Core Date Fetch Request on iOS Device 【发布时间】:2013-03-02 19:45:53 【问题描述】:

我在 ios 设备上从核心数据模型中获取对象时遇到问题。使用模拟器时,可以成功获取对象,但是,在设备上,我用来获取对象的NSMutableArray 是空的。当我在AppDelegate.m 中获取对象时,它会正确返回对象,但是当我在视图控制器中获取它们时会发生错误。我在互联网上搜索了很多,但找不到解决问题的方法。我在应用程序加载时获取对象,收到此错误意味着应用程序将永远无法工作。提前致谢。

P.S: 越狱的 iPhone 在测试时是否功能不正常?另请注意,我创建了另一个使用 Core Data 的应用程序并且它运行正常,我真的不知道这个有什么问题。

- (void)loadCategoriesFromDatabase

categoriesInDatabase = [[NSMutableArray alloc] init];

NSFetchRequest *fetchRequest = [NSFetchRequest alloc];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:managedObjectContext];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"display_order" ascending:YES];
NSArray *sortArray = [NSArray arrayWithObject:sortDescriptor];

[fetchRequest setSortDescriptors:sortArray];
[fetchRequest setEntity:entityDescription];

self.categoriesInDatabase = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

【问题讨论】:

请您发布相关获取请求的代码吗? 我已经发布了代码。 您可能没有正确初始化您的NSMutableArray;第一行使用self.categoriesInDatabase。此外,检查executeFetchRequest 之后的错误(您当前正在传递一个没有帮助的nil 参数)。 @RoboticCat,我用过self.categoriesInDatabase,没有任何改变。请注意,当我从 AppDelegate.m 获取对象时,数组成功返回对象,当我从 View Controller 获取它们时,应用程序终止并出现异常:-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array。 1.您在哪一行收到错误消息?它不应该是二传手,所以你在哪里打电话给objectAtIndex? 2. 如果self.categoriesInDatabase 在获取请求后为空,则您的获取有问题,您应该使用错误输出参数检查错误。这有什么好处? 【参考方案1】:

尝试像这样将NSError 指针传递给executeFetchRequest

NSError* error = nil;
NSArray* categories = [managedObjectContext executeFetchRequest:fetchRequest
                                            error:&error];
if(error) 
    NSLog(@"%@", [error debugDescription]);

self.categoriesInDatabase = [categories mutableCopy];

并发布错误日志。

【讨论】:

我通过正确初始化NSFetchRequest 设法解决了这个问题。感谢您的帮助。

以上是关于iOS 设备上的核心日期获取请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 核心数据中获取更多属性的请求?

ios 核心蓝牙与外部 BLE 设备配对

服务器返回重定向 (302) 后,iOS 设备上的 AJAX 或 XHR 请求失败,代码为 0

iphone查看网络请求

在 iOS SWIFT 2 中取消获取请求 [关闭]

使用WatchConnectivity获取核心数据获取请求