Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 无法复制核心数据NSManagedObject吗?_Objective C_Core Data - Fatal编程技术网

Objective c 无法复制核心数据NSManagedObject吗?

Objective c 无法复制核心数据NSManagedObject吗?,objective-c,core-data,Objective C,Core Data,我试图复制一个包含核心数据实例的NSManagedObject,但这样做时,我会有一些非常奇怪的行为,就像复制后对象以某种方式相互链接,对其中一个对象的更改也会影响另一个对象 NSManagedObject *originalTransactionRow = [self.transactionRowsRows objectAtIndex:indexPath.row]; NSManagedObject *originalTransactionHeader = [self.transactionRo

我试图复制一个包含核心数据实例的NSManagedObject,但这样做时,我会有一些非常奇怪的行为,就像复制后对象以某种方式相互链接,对其中一个对象的更改也会影响另一个对象

NSManagedObject *originalTransactionRow = [self.transactionRowsRows objectAtIndex:indexPath.row];
NSManagedObject *originalTransactionHeader = [self.transactionRowsHeader objectAtIndex:0];
NSString *originalOrderNumberLocalStr = [originalTransactionRow valueForKey:@"orderNumber"];

NSString *returnOrderNumber = [NWTillHelper getNewOrderNumber];
NSManagedObject *returnOrderHeader = nil;
NSManagedObject *returnOrderRow = nil;

returnOrderHeader = [NSEntityDescription insertNewObjectForEntityForName:@"OrderHead" inManagedObjectContext:context];
returnOrderRow = [NSEntityDescription insertNewObjectForEntityForName:@"OrderRow" inManagedObjectContext:context];

returnOrderHeader = originalTransactionHeader;
returnOrderRow = originalTransactionRow;

NSError *error = nil;
if(![context save:&error]) {
   if([NWTillHelper isDebug] == 1) {
   NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
   return;
   }
}

如果您指的是以下几行:

returnOrderHeader = originalTransactionHeader;
returnOrderRow = originalTransactionRow;
那些不是复制品。但这与核心数据或托管对象无关——当您使用对象引用进行详细说明时,Objective-C并不是这样工作的。当您有类似于
NSManagedObject*returnOrderHeader
的声明时,
*
表示您正在保存指向该对象的指针。复制指针值不会复制对象数据,而是复制指针值。最后两个变量的指针相同,这意味着它们实际上是同一个对象


如果要制作对象的副本,则需要执行额外的步骤。如果对象的类符合
NSCopying
协议,那么您可以对对象调用
copy
。但是托管对象不能做到这一点,因此您需要创建一个新实例,然后编写自己的代码将属性值从旧实例复制到新实例。

如果您正在引用以下行:

returnOrderHeader = originalTransactionHeader;
returnOrderRow = originalTransactionRow;
那些不是复制品。但这与核心数据或托管对象无关——当您使用对象引用进行详细说明时,Objective-C并不是这样工作的。当您有类似于
NSManagedObject*returnOrderHeader
的声明时,
*
表示您正在保存指向该对象的指针。复制指针值不会复制对象数据,而是复制指针值。最后两个变量的指针相同,这意味着它们实际上是同一个对象


如果要制作对象的副本,则需要执行额外的步骤。如果对象的类符合
NSCopying
协议,那么您可以对对象调用
copy
。但是托管对象不能做到这一点,因此您需要创建一个新实例,然后编写自己的代码将属性值从旧实例复制到新实例。

明白了,这可能会解释问题,因此,基本上我需要创建一个新的空ManagedObject,然后根据旧对象逐个设置值,并将新对象保存到Context,没错。任何关系也需要重新创建。明白了,这可能会解释问题,所以基本上我需要创建一个新的空ManagedObject,然后根据旧对象逐个设置值,并将新对象保存到ContextIt’s right。任何关系也需要重新建立。关于这个主题的大量实验可以在这里找到:关于这个主题的大量实验可以在这里找到: