我已经阅读了核心数据文档,感觉我仍然缺少一些东西。
我不太明白如何将对象插入到另一个对象的关系中。
例如,我的模型中有以下两个实体
flightDepartureBoard
name:
from_airport:
to_airport:
current_flights: (this is a one to many relationship of flight detail entities)
flight_details
arrive
depart
name
所以我的数据包含一些机场的不同出发板的列表。每个出发板都包含许多航类详细信息,其中包含该机场当前到达和出发的信息。
我目前的理解是插入特定出发航类的航类详细信息,我必须获取该航类的托管对象,然后为每个航类创建一个新的托管对象并适当设置其值,然后创建一个包含航类托管的 NSSet对象并将 depatureboards ManagedObject current_flights (关系)设置为刚刚创建的 NSSet。这是正确的吗?
如果我想添加新条目怎么办?我想我不需要先获取整个集合?
感谢您的帮助..
<小时/>虽然我刚刚意识到我可以在 FlightDetails 对象上设置与当前对象的关系..
最佳答案
有几个选项:
1.您可以使用add<Key>Object:
在 NSManagedObject 上:
NSManagedObject *flightBoard = [NSEntityDescription insertNewObjectForEntityForName:@"FlightDepartureBoard" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *details = [NSEntityDescription insertNewObjectForEntityForName:@"Flight_Details" inManagedObjectContext:self.managedObjectContext];
[flightBoard addCurrent_flightsObject:details];
尽管除非您在类别中定义访问器,否则您会收到编译器警告:
@interface NSManagedObject (Current_flightsAccessors)
- (void)addCurrent_flightsObject:(NSManagedObject *)value;
- (void)removeCurrent_flightsObject:(NSManagedObject *)value;
- (void)addCurrent_flights:(NSSet *)value;
- (void)removeCurrent_flights:(NSSet *)value;
@end
2.子类。您可以从模型生成类文件,其中包括用于多对多关系的访问器:
FlightDepartureBoard.h:
#import <CoreData/CoreData.h>
@class Flight_Details;
@interface FlightDepartureBoard : NSManagedObject
{
}
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * from_airport;
@property (nonatomic, retain) NSString * to_airport;
@interface FlightDepartureBoard (CoreDataGeneratedAccessors)
- (void)addCurrent_flightsObject:(Flight_Details *)value;
- (void)removeCurrent_flightsObject:(Flight_Details *)value;
- (void)addCurrent_flights:(NSSet *)value;
- (void)removeCurrent_flights:(NSSet *)value;
@end
FlightDepartureBoard.m:
#import "FlightDepartureBoard.h"
#import "Flight_Details.h"
@implementation FlightDepartureBoard
@dynamic name;
@dynamic from_airport;
@dynamic to_airport;
@dynamic current_flights;
@end
3.您可以使用 mutableSetValueForKey: 获取可变集并修改它。例如:
NSManagedObject *flightBoard = [NSEntityDescription insertNewObjectForEntityForName:@"FlightDepartureBoard" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *details = [NSEntityDescription insertNewObjectForEntityForName:@"Flight_Details" inManagedObjectContext:self.managedObjectContext];
NSMutableSet *flights = [flightBoard mutableSetValueForKey:@"current_flights"];
[flights addObject:details];
有关更多信息,请查看 Managed Object Accessor Methods .
关于iPhone核心数据插入新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738676/