Iphone 在iOS中使用核心数据更新记录
我似乎找不到一个关于如何使用iOS上的核心数据更新现有数据行的示例。就SQL而言,我希望做一些如下工作: 更新设备集attr1='blah',attr2='blah',其中deviceid='1' 我知道我可以做这样的事情: [设备设置值:@“blah”forKey:@“attr1”] 但是,只有在设备ID='1'的情况下,我才能这样做Iphone 在iOS中使用核心数据更新记录,iphone,ios,Iphone,Ios,我似乎找不到一个关于如何使用iOS上的核心数据更新现有数据行的示例。就SQL而言,我希望做一些如下工作: 更新设备集attr1='blah',attr2='blah',其中deviceid='1' 我知道我可以做这样的事情: [设备设置值:@“blah”forKey:@“attr1”] 但是,只有在设备ID='1'的情况下,我才能这样做 非常感谢您的帮助。对于核心数据,您永远不会直接执行SQL查询。。。只需更新对象的值,然后保存managedObjectContext,即可更新数据库 在您的示例
非常感谢您的帮助。对于核心数据,您永远不会直接执行SQL查询。。。只需更新对象的值,然后保存managedObjectContext,即可更新数据库 在您的示例中,设备是对象的特定实例<代码>[设备设置值:@“blah”forKey:@“attr1”]将只更新1个设备对象,因此不需要任何where子句
如果需要从数据库中检索正确的设备对象,则需要使用。我建议您浏览一下,以了解核心数据是如何工作的。如果您询问的是SQL语句和WHERE子句,那么您对核心数据的看法似乎不正确。出于安全考虑,请使用
lastObject
方法。如果executeFetchRequest:error:
返回nil,您的程序将崩溃:
NSManagedObject *device = [fetchedObjects lastObject];
用SQL术语来考虑核心数据是一个致命的错误。核心数据是一个对象图管理系统,它有时使用SQL来持久化对象图。在核心数据中,实体不是表,属性不是列,ManagedObject不是行。请参见+1“实体不是表,属性不是列,ManagedObject不是行”。。。那有一个很酷的禅宗戒指。这对我没有帮助。一些代码示例或链接怎么样?是的,我知道它不是SQL。但在执行获取请求后,我在设置实体的值时遇到了问题。例如,我使用以下代码执行fetchrequest://获取设备记录NSFetchRequest*fetchrequest=[[NSFetchRequest alloc]init];NSEntityDescription*实体=[NSEntityDescription entityForName:@“设备”在托管对象上下文:上下文中];[FetchRequestSetEntity:entity];NSPredicate*谓词=[NSPredicate谓词格式:@“(设备ID=%d)”,设备ID];[FetchRequestSetPredicate:谓词];但当我尝试更新实体上的值时,它会给我一个错误,如:[entity setValue:[NSNumber numberWithInteger:sealedSwitch.on]forKey:@“sealed”];这是最正确的答案,必须作为答案进行检查!