在 Apple 的“TaggedLocations”核心数据示例中,ivar NSManagedObjectContext 获得了一个值,但我找不到在哪里?
Posted
技术标签:
【中文标题】在 Apple 的“TaggedLocations”核心数据示例中,ivar NSManagedObjectContext 获得了一个值,但我找不到在哪里?【英文标题】:In Apple's 'TaggedLocations' Core Data example a ivar NSManagedObjectContext gets a value but I can't find where? 【发布时间】:2015-03-31 21:15:04 【问题描述】:在 Apple 的核心数据示例 'TaggedLocations' 中,他们有一个 ViewController 在标题中声明它
@property (nonatomic) NSManagedObjectContext *managedObjectContext;
然后在主文件中,他们永远不会将该上下文设置为等于任何内容,也不会对其进行初始化或将其分配到任何地方。他们只是在获取请求中使用它来检索结果。这是有道理的,因为上下文只是持久存储中对象的“便签本”。
但是,我也看不出他们是如何声明哪个或任何持久性存储的。在之前的 Core Data 示例中,我总是看到人们创建 AppDelegate 的实例并访问它的上下文和存储,这是有道理的,因为在这个示例中,整个核心数据堆栈都在那里。
这是来自 Apple 示例的代码的 sn-p,我在看什么?
/*
Fetch existing events.
Create a fetch request for the Event entity; add a sort descriptor; then execute the fetch.
*/
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"APLEvent"];
[request setFetchBatchSize:20];
// Order the events by creation date, most recent first.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
[request setSortDescriptors:sortDescriptors];
// Execute the fetch.
//Not sure how they're excuting a fetch request on self.managedObjectContext? Seems to be a nil unintialized context
//TO-DO Test value of context
NSError *error;
NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];
if (fetchResults == nil)
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
链接到 Apple 的示例 https://developer.apple.com/library/ios/samplecode/TaggedLocations/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008914
非常感谢您的任何意见!
【问题讨论】:
签入 AppDelegate .... 【参考方案1】:每当使用核心数据创建项目时,您都可以在应用委托中获得这些,
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; @property (只读、强、非原子) NSManagedObjectModel *managedObjectModel; @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
您也可以获取外部文件,用于存储您的数据。
【讨论】:
对,我在 App Delegate 中看到了那些,但是他们如何通过这个视图控制器访问它呢?是因为获取请求具有我们要查找的实体名称,并且由于该项目中只有一个模型,它知道自动查找的位置吗?还是有些不解。另外,我没有看到外部文件? 找到了!在 App Delegate 的 didFinishLaunchingWithOptions 方法中,他们将 View Controllers managedObjectContext 设置为与 AppDelegate 相同的对象,这就是他们的做法。 'APLEventsTableViewController *controller = (APLEventsTableViewController *)navigationController.topViewController; controller.managedObjectContext = self.managedObjectContext;'以上是关于在 Apple 的“TaggedLocations”核心数据示例中,ivar NSManagedObjectContext 获得了一个值,但我找不到在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 中创建 Apple Watch 应用或配置 Apple Watch 应用
在 Apple 芯片设备上用 Android Studio?别忘了使用 Apple 芯片预览版!
在 Apple 芯片设备上用 Android Studio?别忘了使用 Apple 芯片预览版!