【问题标题】:How to use NSManaged object class using NSObject class如何使用 NSManaged 对象类使用 NSObject 类
【发布时间】:2014-04-02 05:12:08
【问题描述】:

我有 NSObject 类名 TrackInfo,其中包含名称、艺术家姓名、拇指图像等曲目信息。

我用这个类作为下载数据,解析数据后把信息保存到那个类。 现在我有另一个选项卡,我必须在其中显示一些数据。这与 trackInfo 类似的数据。但是当应用程序处于离线状态时,我必须制作NSManagedObject。与trackinfo相同。

我可以使用NSObject 类代替NSManagedObject 或Vice-Versa 吗?

我基本上想要做的是,我必须显示一个类的轨道信息,要么是 Trackinfo(NSObject 类),要么是 NSManagedObjectClass,用于在应用离线时保存数据。

【问题讨论】:

  • 您查看过 raywenderlich 的核心数据教程吗?
  • 是的,我看了一下,我主要关心的是我们可以像使用 NSObject 类一样使用 NSmanagedObject 类吗?
  • 您可以像使用任何其他对象一样使用它,但不能像其他任何 nsobject 一样初始化它,因为所有相关信息都保存在 managedObjectContext 中。所以他们的工作方式相似。
  • 所以我必须初始化对象如下 'NSEntityDescription *entity = [NSEntityDescription entityForName:@"trackInfo" inManagedObjectContext:myContext]; id object = [[trackInfo alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];'之后我可以像普通的 NSObject 一样使用吗?
  • 是的 :) 因为您将 nil 放入“insertManagedObjectContext:nil”,所以您对对象所做的任何更改都不会影响 CoreData db。

标签: ios iphone core-data nsmanagedobject nsobject


【解决方案1】:

简短的回答是肯定的,你可以。如何?你可以找到有用的讨论Organising Core Data for iOS

可以在文档中获取长答案。

NSManagedObject 是一个泛型类,它实现了所有基本的 核心数据模型对象所需的行为。这是不可能的 使用NSObject 的直接子类的实例(或任何其他不 继承自 NSManagedObject) 并带有托管对象上下文。你 可以创建NSManagedObject 的自定义子类,尽管这不是 总是需要的。如果不需要自定义逻辑,一个完整的对象图 可以用NSManagedObject 实例组成。

一个托管对象与一个实体描述(一个实例 NSEntityDescription) 提供有关对象的元数据 (包括对象所代表的实体的名称和 其属性和关系的名称)和一个托管对象 跟踪对象图变化的上下文。重要的是 托管对象已正确配置为与 Core Data 一起使用。如果你 直接实例化一个托管对象,必须调用指定的 初始化程序 (initWithEntity:insertIntoManagedObjectContext:)。

关于您的问题,这取决于您需要实现的目标。如果您的目标是在您的设备和服务器之间执行同步机制,您应该设置 1) 具有TrackInfo 实体的模型 2) 依赖于 SQLite 等持久存储的核心数据堆栈。然后您应该修改TrackInfo 以考虑对该实体的修改。例如,dirty 标志属性(01)或timestamp。当您对 TrackInfo 进行修改时,您会更新该属性。恢复连接后,您需要查询该属性并与服务器同步。如果您选择timestamp,服务器应该说明要查询的最新时间戳是什么。

【讨论】:

  • 是的,设置标志 1 或 0 并不是一个坏主意,因为我说我主要关心的是如何将 NSmanagedObject 类用作 NSObject ,可能的答案是 NSEntityDescription *entity = [NSEntityDescription entityForName: @"trackInfo" inManagedObjectContext:myContext]; id object = [[trackInfo alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];'所以它不会影响那个数据库
  • 上下文是一种容器。如果您不保存它,则不会将任何对象存储在持久存储中……您可能的答案将不起作用。 @DkKumar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多