如何将从核心数据加载的数据保存在数组中?

Posted

技术标签:

【中文标题】如何将从核心数据加载的数据保存在数组中?【英文标题】:How to save data loaded from core data in array? 【发布时间】:2015-05-20 13:02:34 【问题描述】:

我在代码中使用以下代码从CoreData 获取数据:

id appdelegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *managedObjectContext = [appdelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TelePayment" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES];
[fetchRequest setSortDescriptors:@[sort]];
NSError *error = nil;
 Items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

似乎当我更改我的CoreData 实体(删除项目)时,Items 数组也发生了变化?对吗?

如果是,我该如何避免这种情况?

【问题讨论】:

【参考方案1】:

您需要创建一个包装类,该类将使用核心数据实体进行实例化,并在您的代码中使用该类的对象。

例如,如果你有这样的实体

@interface Item: NSManagedObject
  NSInteger id;
  NSString *name;
@end

你应该创建一个类

@interface ItemObject: NSObject
  NSInteger itemId;
  NSString *itemName;
@end

@implementation ItemObject

  - (void)initWithEntity:(NSManagedObject*)entity 
    self = [super init];
    if (self) 
      _itemId = entity.id;
      _itemName = entity.name;
    
    return self;
  
@end

更新:(此处重复评论以提高可读性)

...
Items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSMutableArray *newArray = [NSMutableArray new];
for (NSManagedObject *object in items) 
  ItemObject *newItem = [[ItemObject alloc] initWithEntity:object];
  [newArray addObject:newItem];

比你和newArray合作。

【讨论】:

那么如何使用这个包装类呢?

以上是关于如何将从核心数据加载的数据保存在数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义数组保存/重新加载到 plist

如何在核心数据中保存图像的引用(图像 URL 或路径)并在以后需要时加载?

基于核心数据文档的应用程序:保存,但无法加载

将核心数据加载到数组中,然后填充表视图,重新排序数组对象不会持久

如何将从 .arff 文件加载的 arff 对象转换为数据帧格式?

将子实体加载到核心数据中的托管对象