0

我有两个 NSManagedObject:

  1. 数据输入
  2. 普罗旺斯

它们之间有一个关系:DataEntered 必须有一个 Provence,而 Provence 可能有一个/多个 DataEntered。

一切运行良好,但在使用 Instruments 和 Allocations 时,每次我将 Provence 设置为 DataEntered 时,#Living 中都会出现一个新的 _CDSnapshot_Provence_:

Provence * provence = [[self fetchedResultsController] objectAtIndexPath:indexPath];
[self.dataEntered setAddress_provence:provence];

DataEntered 中 Provence 的 setter 由 CoreData 管理,没有自定义。

当我保存 DataEntered 时,保存正确。什么会导致创建多个生活_CDSnapshot_Provence_?

谢谢!

@class Provence;

@interface DataEntered : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, strong) Provence *address_provence;

@end


@class Provence;

@interface DataEntered : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, strong) Provence *address_provence;

@end



@class DataEntered;

@interface Provence : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *dataEnteredAddress_Provence;

@end


@interface Provence (CoreDataGeneratedAccessors)

- (void)addDataEnteredAddress_ProvenceObject:(DataEntered *)value;
- (void)removeDataEnteredAddress_ProvenceObject:(DataEntered *)value;
- (void)addDataEnteredAddress_Provence:(NSSet *)values;
- (void)removeDataEnteredAddress_Provence:(NSSet *)values;

@end


#import "Provence.h"
#import "DataEntered.h"


@implementation Provence

@dynamic name;
@dynamic dataEnteredAddress_Provence;

@end 
4

1 回答 1

2

我看到了完全一样的东西,我相信这是可以预料的。

请参阅https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html的 Apple 文档中的 冲突检测和乐观锁定部分

“当 Core Data 从持久存储中获取一个对象时,它会拍摄其状态的快照。快照是一个对象持久属性的字典——通常是它的所有属性和它具有一对一的任何对象的全局 ID关系。”

在同一链接上还有一个部分对阅读很有用 -快照管理

我遇到的问题是在我对所有托管对象进行故障处理或进行上下文重置后,让 Core Data 释放其内存分配。

我刚刚发布了一篇关于此主题和相关主题的博客文章: Core Data issues with memory allocation - http://finalize.com/2013/01/04/core-data-issues-with-memory-allocation/

希望这可以帮助。

斯科特

于 2013-01-04T21:50:17.210 回答