2011-11-15 2 views
9

Sự cố của tôi tương tự như: Problem creating NSManagedObject derived classSử dụng lớp NSManagedObject mà không có initWithEntity :?

Tôi đã thiết lập NSManagedObject trong Dữ liệu chính và có một lớp cho nó. Tuy nhiên, thay vì tạo một lớp NSObject giống hệt nhau, tôi muốn sử dụng lớp NSManagedObject, nhưng tôi không muốn tạo thực thể và lưu nó. Tôi chỉ muốn sử dụng nó cho một mảng, chỉ khi tôi cần lưu đối tượng trong Dữ liệu cốt lõi, tôi có muốn sử dụng insertEntity:

Store * store = [[Store alloc] init];

Nó đem lại cho tôi những lỗi sau: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Store'

Có cách nào để một trong hai lớp con hoặc bằng cách nào đó sử dụng NSManagedObject lớp/tài sản để phân bổ đối tượng tôi chỉ sử dụng tạm thời cho một bảng?

Cảm ơn bạn.

Trả lời

24

Chỉ cần sử dụng initWithEntity: insertIntoManagedObjectContext: và vượt qua một bối cảnh nil, sau đó gọi insertObject: trong bạn NSMAnagedObjectContext khi bạn đã sẵn sàng:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModelClass" inManagedObjectContext:myContext]; 
id object = [[MyModelClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil]; 
+1

Bạn sẽ không đi qua con số không khi tạo mô tả thực thể. Tôi không có hoặc muốn tạo bối cảnh. – runmad

+1

Phương pháp này đáng tin cậy như thế nào? Dường như làm việc đó tại sao tôi đã bỏ phiếu, nhưng đây có phải là cách làm tài liệu không? –

+0

Cũng có thể vượt qua trong mô tả thực thể để NẾU bạn muốn cuối cùng chèn nó, bạn có thể. – amcc

3

Nếu bạn không lưu MOC, thì bạn chỉ cần xóa đối tượng trước khi lưu và nó sẽ không bao giờ được duy trì.

Trong khi dữ liệu cốt lõi là tuyệt vời cho sự bền bỉ, không cần thiết. Trong thực tế, MOC thường được mô tả như là một miếng đệm đầu. Bạn có thể tạo ra các đối tượng và sau đó vứt chúng đi.

An instance of NSManagedObjectContext represents a single “object space” or scratch pad in an application.

Một giải pháp khác là phải có một MOC riêng cho đối tượng tạm thời và sau đó, hoặc vứt bỏ MOC tạm thời hoặc di chuyển các MO vào MOC dai dẳng của mình.

Vì vậy, trong trường hợp này, bạn sẽ - (void)insertObject:(NSManagedObject *)object trên "MOC liên tục" và sau đó - (void)deleteObject:(NSManagedObject *)object trên "MOC tạm thời".