核心数据:- 如何更新数组中的值(可转换)
Core data:- How to update values in the array (Transformable)
我正在开发使用核心数据在本地设备中保存数据的应用程序。在核心数据中,我使用可转换格式将数据保存在数组中,但是,我不知道如何更新数组中的特定值。
我更新数组的代码在这里
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *user = [NSEntityDescription insertNewObjectForEntityForName:@"Type" inManagedObjectContext:context];
NSError *error = nil;
//Set up to get the thing you want to update
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type"inManagedObjectContext:context];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"businessTypes == %@", @"Others"];
[request setPredicate:predicate];
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication]delegate];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
if (results == nil) {
// This implies an error has occurred.
NSLog(@"Error from Core Data: %@", error);
} else {
if (results.count == 0) {
// No objects saved, create a new one...
} else {
// At least one object saved. There should be only one
// so use the first...
user = [results lastObject];
[user setValue:@"Management" forKey:@"businessTypes"];
}
}
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
}
else{
[app saveContext];
NSLog(@"update value successfully");
}
下面是我在核心数据中的保存数组:
{
businessTypes = (
"Social Bussiness",
Marketing,
Transports,
Others
);
},
所以我想将数组中的 "Others" 更新为 "Management"。
当我 运行 这段代码时,我没有错误,但我没有更新索引数组中的特定值。
谢谢你帮助我。
也许您混淆了您的实体。您获取一个名为 Type
的实体,但您正在调用对象 user
,这表明您可能想要获取具有特定业务类型的用户。
如果每个用户只有 一个 "business type",则不需要 Type
实体,只需要 User
的字符串属性实体。
如果每个用户可以拥有不止一种业务类型,您应该有一个实体 Type
,其 name
属性包含 一个 术语,表明业务类型,它应该建模为多对多关系。
User <<--------->> Type
要将现在称为 "Other" 的所有类型设置为 "Management",您可以使用 name
"Other" 获取 Type
,更改它并保存.要仅将用户的一种业务类型从 "Other" 更改为 "Management",您可以:获取用户,删除 "Other" 类型,获取 "Management" 类型,将其添加到用户并保存。
如果您的 businessTypes
属性应该是一个带有硬编码字符串的可转换数组,您可能应该如上所述更改数据模型。使用干净的 Core Data 模型搜索和处理数据时,您将拥有更大的灵活性和更强大的功能。
您必须像这段代码一样修改您的更新函数,然后您将获得所需的输出
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error = nil;
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type"inManagedObjectContext:context];
[request setEntity:entity];
request.propertiesToFetch= @[ @"businessTypes"];
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication]delegate];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
if (results == nil) {
// This implies an error has occurred.
NSLog(@"Error from Core Data: %@", error);
} else {
if (results.count == 0) {
// No objects saved, create a new one...
} else {
int loopCount = (int)results.count;
Type* entityType = nil;
for (int index=0; index<loopCount; index++) {
entityType = (Type*)results[index];
if (entityType.businessTypes!=nil) {
NSUInteger reqIndex = [entityType.businessTypes indexOfObject:@"Others"];
[entityType.businessTypes replaceObjectAtIndex:reqIndex withObject:@"Management"];
[entityType setValue:entityType.businessTypes forKey:@"businessTypes"];
}
}
}
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
}
else{
[app saveContext];
NSLog(@"update value successfully");
}
我正在开发使用核心数据在本地设备中保存数据的应用程序。在核心数据中,我使用可转换格式将数据保存在数组中,但是,我不知道如何更新数组中的特定值。 我更新数组的代码在这里
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *user = [NSEntityDescription insertNewObjectForEntityForName:@"Type" inManagedObjectContext:context];
NSError *error = nil;
//Set up to get the thing you want to update
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type"inManagedObjectContext:context];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"businessTypes == %@", @"Others"];
[request setPredicate:predicate];
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication]delegate];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
if (results == nil) {
// This implies an error has occurred.
NSLog(@"Error from Core Data: %@", error);
} else {
if (results.count == 0) {
// No objects saved, create a new one...
} else {
// At least one object saved. There should be only one
// so use the first...
user = [results lastObject];
[user setValue:@"Management" forKey:@"businessTypes"];
}
}
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
}
else{
[app saveContext];
NSLog(@"update value successfully");
}
下面是我在核心数据中的保存数组:
{
businessTypes = (
"Social Bussiness",
Marketing,
Transports,
Others
);
},
所以我想将数组中的 "Others" 更新为 "Management"。
当我 运行 这段代码时,我没有错误,但我没有更新索引数组中的特定值。 谢谢你帮助我。
也许您混淆了您的实体。您获取一个名为 Type
的实体,但您正在调用对象 user
,这表明您可能想要获取具有特定业务类型的用户。
如果每个用户只有 一个 "business type",则不需要 Type
实体,只需要 User
的字符串属性实体。
如果每个用户可以拥有不止一种业务类型,您应该有一个实体 Type
,其 name
属性包含 一个 术语,表明业务类型,它应该建模为多对多关系。
User <<--------->> Type
要将现在称为 "Other" 的所有类型设置为 "Management",您可以使用 name
"Other" 获取 Type
,更改它并保存.要仅将用户的一种业务类型从 "Other" 更改为 "Management",您可以:获取用户,删除 "Other" 类型,获取 "Management" 类型,将其添加到用户并保存。
如果您的 businessTypes
属性应该是一个带有硬编码字符串的可转换数组,您可能应该如上所述更改数据模型。使用干净的 Core Data 模型搜索和处理数据时,您将拥有更大的灵活性和更强大的功能。
您必须像这段代码一样修改您的更新函数,然后您将获得所需的输出
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error = nil;
NSFetchRequest * request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Type"inManagedObjectContext:context];
[request setEntity:entity];
request.propertiesToFetch= @[ @"businessTypes"];
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication]delegate];
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
if (results == nil) {
// This implies an error has occurred.
NSLog(@"Error from Core Data: %@", error);
} else {
if (results.count == 0) {
// No objects saved, create a new one...
} else {
int loopCount = (int)results.count;
Type* entityType = nil;
for (int index=0; index<loopCount; index++) {
entityType = (Type*)results[index];
if (entityType.businessTypes!=nil) {
NSUInteger reqIndex = [entityType.businessTypes indexOfObject:@"Others"];
[entityType.businessTypes replaceObjectAtIndex:reqIndex withObject:@"Management"];
[entityType setValue:entityType.businessTypes forKey:@"businessTypes"];
}
}
}
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
}
else{
[app saveContext];
NSLog(@"update value successfully");
}