首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据更新

核心数据更新
EN

Stack Overflow用户
提问于 2014-02-24 13:20:45
回答 2查看 167关注 0票数 1

我有一个项目,有一对多的关系。我正在尝试更新核心数据。我有核心数据

若要添加和更新,请使用以下代码

代码语言:javascript
复制
NSManagedObjectContext *context = [self managedObjectContext];

if (self.contactdb) {
    // Update existing device
    [self.contactdb setValue:self.name.text forKey:@"name"];

   //------------- ???? --------------------

} else {
    // Create a new device
    NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Name" inManagedObjectContext:context];
    [newDevice setValue:self.name.text forKey:@"name"];

    for (int i = 0 ; i< appDelegate.TimeOfReceipt.count; i++) {

        NSManagedObject *timeinday = [NSEntityDescription insertNewObjectForEntityForName:@"Timeinday" inManagedObjectContext:context];

        TimeCell *p1 = [appDelegate.TimeOfReceipt objectAtIndex:i];

        [timeinday setValue:p1.dateOfTime forKey:@"timeinday"];
        [timeinday setValue:[NSNumber numberWithInt:i] forKey:@"index"];
        [timeinday setValue:newDevice forKey:@"name"];

    }

}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}

我如何更新时辰?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-24 13:37:21

代码语言:javascript
复制
NSManagedObjectContext *context = твой контекст;

NSPredicate *pred = [NSPredicate predicateWithFormat:@"name.name like[cd] %@",@"Нужный name у Name"];

NSEntityDescription *ed = [NSEntityDescription entityForName:@"Timeindays" inManagedObjectContext:context];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:ed];
[fetchRequest setPredicate:pred];

fetchRequest.includesPropertyValues = NO;
fetchRequest.includesSubentities = NO;


NSError *error;
NSArray *items = [context executeFetchRequest:fetchRequest error:&error];

if (error) {
    NSLog(@"Error requesting items from Core Data: %@", [error localizedDescription]);
}

for (NSManagedObject *managedObject in items) {
    [context deleteObject:managedObject];
}

if (![context save:&error]) {
    NSLog(@"Error deleting %@ - error:%@", ed, [error localizedDescription]);
}

Илипросто

代码语言:javascript
复制
//Выбери нужный Name, потом: 

for (NSManagedObject *managedObject in name.timeinday) {
    [context deleteObject:managedObject];
}

if (![context save:&error]) {
    NSLog(@"Error deleting %@ - error:%@", ed, [error localizedDescription]);
}
票数 1
EN

Stack Overflow用户

发布于 2014-02-24 13:25:26

您最好在Xcode中创建托管对象子类,因为它将添加许多在集成到多个关系时可以使用的适当类型的方法。然后,使用这些方法而不是setValue:forKey:

在你的情况下,虽然你应该这样做,但你的关系是1:-多,所以你可以设置1结尾:

代码语言:javascript
复制
[newDevice setValue:timeinday forKey:@"timeinday"];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21989036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档