在我的应用程序中,其中包含具有与office相关的字段的用户列表,我从远程服务器加载两个JSON文件。一个包含用户的文件,一个包含办公室的文件。
我的核心数据模型包含两个实体:用户和Office。它们彼此相关。在用户中有一个名为office的关系。到目前为止一切顺利。
但是现在我必须填写实体User中的字段才能很好用。清单已经存在。精细!但是当使用来自JSON的数据填充实体User时,我必须从Office实体中获取相应的managedObject,以将其传递给User实体中的User项。
我已经在User类中定义了office属性
@property (nonatomic, retain) NSManagedObject *office;
但令我头疼的是我只有一个在appDelegate中定义的managedObjectContext。我将managedObjectContext传递给ListViewController。见吼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error.
}
// Pass the managed object context to the view controller.
listViewController.managedObjectContextUser = context;
// Override point for customization after application launch.
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
return YES;
}
但如果我尝试访问我之前在标头中声明的第二个Office的托管对象,它会引发异常:
- (void)updateUsers
{
NSString *users = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:kUsersFilePath]];
if ([users length] == 0)
{
NSLog(@"usersList is == 0");
[users release];
return;
}
SBJsonParser *parser = [[SBJsonParser alloc] init];
usersObject = [[parser objectWithString:users error:nil] copy];
usersList = [usersObject objectForKey:kUsersDataName];
[parser release];
User *user = (User *)[NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContextUser];
NSError *error = nil;
Office *office = (Office *)[NSEntityDescription entityForName:@"Office" inManagedObjectContext:managedObjectContextOffice];
NSLog(@"managedObjectContextOffice: %@", office);
我的问题是我必须在appDelegate中创建第二个managedObjectContext。一个用户和一个用于Office?
或者有没有办法如何处理从ListViewController中只有一个managedObjectContext的两个不同实体中获取对象?
答案 0 :(得分:1)
当然,managedObjectContext
指的是整个数据模型,因此您可以使用该上下文对您的实体执行所有操作。
在阅读新的User
或Office
对象后,尝试通过将其插入managedObjectContext
实际创建新对象:
User *user = [NSEntityDescription
insertNewObjectForEntityForName:@"User"
inManagedObjectContext:self.managedObjectContext];
使用类中自动生成的方法将office对象附加到用户,反之亦然。