iPhone核心数据插入新对象

标签 iphone core-data insert

我已经阅读了核心数据文档,感觉我仍然缺少一些东西。

我不太明白如何将对象插入到另一个对象的关系中。

例如,我的模型中有以下两个实体

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/

相关文章:

iphone - varchar字段大小问题

ios - UITableView 和 NSFetchedResultsController 内存泄漏

objective-c - 对于核心数据,我应该使用一个实体还是分成更小的实体?

ios - 在iOS上将核心数据与FMDB相结合

sql - 自动匹配 INSERT INTO ... SELECT ... FROM 中的列

iphone - 为什么图像没有从 url 的 xml 文件加载并且没有显示在表格 View 中

iphone - View 不是从iOS7状态栏的底部开始

iphone - Textarea 占位符不适用于 iphone phonegap

php - MYSQL,插入有效但无法连接

mysql - 首先 wpdb 插入到 mySql 新表不工作