核心数据中的数组不会保存在iPhone中,而是保存在模拟器中

时间:2015-12-08 11:10:52

标签: ios objective-c core-data

奇怪的事 我将Array存储在核心数据的属性中,

当我在iPhone(iphone 6s)上运行应用程序时,表明一切正常 但是当我关闭不会在后台运行的应用时, 并再次打开应用程序,数组是空的!
我在xcode的模拟器上做了同样的事情,一切都很棒!

是什么原因?

我将数组保存在这样的属性类型中 - 二进制数据

这段代码:

-(void)viewWillAppear:(BOOL)animated
{
    self.arr = [NSKeyedUnarchiver unarchiveObjectWithData:[_obj2 valueForKey :@"arrayDataEvent"]];

    if(self.arr==nil)
    {
        self.arr=[[NSMutableArray alloc]init];
    }
}
-(void)save//button
{

    if (self.obj2)//obj2 is a specific NSManagedobject from another controller table view
    {
        NSString*str=[NSString stringWithString:_textView.text];
            [self.arr addObject:str];

        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.arr];
        [_obj2 setValue:data forKey:@"arrayDataEvent"];

        NSMutableArray*arr2 = [NSKeyedUnarchiver unarchiveObjectWithData:[_obj2 valueForKey :@"arrayDataEvent"]];

        NSLog(@"  arr = %@",arr2 );
    }
    [self.navigationController popViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:0)

Core Data不是一个适合存储数组的框架。 IMO,您应该选择以下两个选项之一:

  1. 您要么创建一个具有多对多关系的正确数据模型(对象图)来建模数组元素;
  2. 或者您使用了更为简单的NSUserDefaults,它似乎更符合您的要求。
  3. 至于您的具体问题:您显然不是保存您的托管对象上下文。数据不会写入商店,并且在您重新启动应用程序时将无法使用。

    do { try context.save() } catch { print("Couln't save.") }