2015-07-31 2 views
-1

Я работаю над приложением, использующим данные Core для сохранения данных на локальном устройстве. В данных Core я сохраняю данные в массиве с использованием формата Transformable, но я не знаю, как обновлять определенные значения в массиве. Мой код для обновления массива здесьОсновные данные: - Как обновить значения в массиве (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 
    ); 
}, 

, поэтому я хочу, чтобы обновить «Другие» в «Управление» в массиве.

Когда я запускаю этот код, у меня нет ошибки, но я не обновляю определенное значение в массиве индексов. благодаря мне.

+0

я также сделал демо-приложение на базе вашего код с его работает отлично, а также обновленные значения. –

+0

self.manageObjectContext должен иметь свойство ссылочного объекта appdelegate для взаимодействия с coredata. например self.managedobjectcontext = appdelegate.managedObjectContext –

+0

@abrar ul haq ..thanks для ответа Мой вопрос: можете ли вы отправить мне демо на мой идентификатор электронной почты ... ramchoudhary1993 @ gmail.com..пожалуйста, пошлите мне демо. – RAMA

ответ

-1

Вы должны изменить вашу функцию обновления, как этот код, то вы получите ваш необходимый выход

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"); 
} 
+0

bhaijan ..thanks этот ответ решает мои проблемы. – RAMA

+0

без проблем брат –

1

Возможно, вы путаете свои сущности. Вы получаете объект под названием Type, но вы вызываете объект user, указывая, что, возможно, вы хотите получить пользователя, имеющего определенный тип бизнеса.

Если каждый пользователь имеет только один «бизнес-типа», вам не нужен Type объект, только строковый атрибут для User объекта.

Если каждый пользователь может иметь более одного коммерческого типа, вы должны иметь объект Type с атрибутом name, который включает один термин, указывающий тип бизнеса, и она должна быть смоделирована как многие-ко-многим.

User <<--------->> Type 

Для установки всех типов, которые теперь называются «Другое» в «Управление», вы бы принести Type с name «Другое», изменить его и сохранить. Чтобы изменить только один из бизнес-типов пользователя с «Другое» на «Управление», вы должны: извлечь пользователя, удалить «Другой» тип, выбрать тип «Управление», добавить его пользователю и сохранить.

Если ваш атрибут businessTypes должен быть преобразованным массивом с жестко закодированными строками, вероятно, вы должны изменить модель данных, как описано выше. У вас будет гораздо больше гибкости и мощности для поиска и обработки данных с чистой моделью Core Data.

+0

@ Мунди .. многое для ответа на мой вопрос, теперь мой confusen ясен. – RAMA

Смежные вопросы