1

很难掌握核心数据的工作方式,我希望我能在这里得到一些非常基本的帮助。

我有两个实体:

Profiles<-->>Events

我已经成功地弄清楚了如何通过谓词获取添加配置文件、在表格视图中查看配置文件以及在表格视图中查看配置文件的事件。

现在,这就是我迷路的地方。假设我想更新 Event 实体中的事件。在更新 Event 实体之前,我是否必须使用谓词来创建 Profiles 对象?或者我可以只更新事件实体并通过关系以某种方式告诉它与哪个配置文件相关联吗?

这是我遇到日志堵塞的地方:

// add new event
    //NSLog(@"Adding New Event");

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Events"];
    NSPredicate *predicate=[NSPredicate predicateWithFormat:@"ANY profile.profilename=[cd] %@",[self profilename]];

    [fetchRequest setPredicate:predicate];

    self.events = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];

    //insert event info
    NSManagedObject *eventInfo = [NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:self.managedObjectContext];


/////////  THIS IS WHERE I NEED HELP



}


// save the context
NSError *error = nil;
if (![managedObjectContext save:&error]){
    NSLog(@"Error! %@",error);
}

我即将准备好创建一个平面文件并使用它!快把我逼疯了!

编辑 - 更改代码如下* ** * ** * ** * ** * ** * ** * ** * *

// add new event
    //NSLog(@"Adding New Event");

    Events *newEvent = (Events *)[NSEntityDescription insertNewObjectForEntityForName:@"Events" inManagedObjectContext:managedObjectContext];
    newEvent.eventdesc=self.eventDescTextField.text;


    NSString *wkst = eventDescTextField.text;
    NSNumber  *wk = [NSNumber numberWithInteger: [wkst integerValue]];
    newEvent.weeksout = wk;

所以现在我知道我需要告诉事件实体使用当前配置文件..我如何访问关系?

4

1 回答 1

1

查看您提供的代码,我认为您对 Core Data 有误解。

看起来您正在尝试获取与配置文件相关的所有事件。您不需要为此创建和执行获取请求。Core Data 是一个对象图。这意味着如果您在托管对象上下文中有一个对象,您可以通过它的关系获取它的相关对象,您不需要运行获取请求。

于 2013-10-21T16:57:55.247 回答