2012-05-11 2 views
0

Я работаю над функцией получения данных JSON из моего веб-сервиса, скажем, книг. Вот пример JSONИдентификатор атрибута ядра CoreData и заданный атрибут сущности динамически

"books" : [ 
    { 
     name : "this is book name", 
     isbn_number : "this is isbn number of the book" 
     author_id : "the author id related to this book" 
    }, 
    { 
     name : "this is second book name", 
     isbn_number : "this is isbn number of the second book" 
     author_id : "the author id related to this second book" 
    }, 
] 

Я так хочу, чтобы сохранить данные в SQLite это что-то вроде этого

NSMutableArray * bookList = [JSONDataFromServer objectForKey:@"books"]; 

[bookList enumerateObjectsUsingBlock:^(id book, NSUInteger idx, BOOL *stop){ 

    Book *bookObject = (Book *)[NSEntityDescription insertNewObjectForEntityForname:@"Book" 
          inManagedObjectContect:mangedObjectContext]; 

    for (id key in book) { 
     SEL selector = NSSelectorFromString(key); 
     if ([bookObject respondToSelector:selector]){ 
      // do something to set bookObject attribute (which is the name as key) 
     } 
    } 

    if (![managedObjectContext save:&error]){ 
     NSLog(@"%@", [error localizedDescription]); 
    } 
} 

*** I hope you can see what I'm doing *** 

Делая это, я не должен вручную установить значение каждого атрибута. Мне просто нужно обновить миграцию приложения в соответствии с веб-сервером, убедитесь, что JSON правильно. Но вопрос в том.

  1. Для веб-сервиса (Ruby On Rails), мы обычно называют с строчными буквами, заменить пространство подчеркивания (author_id). Но здесь, в Objective-C, удалите пробел и замените первый символ каждого слова на верхний регистр (authorId). Итак, каково должно быть имя объекта сущности, book.author_id или book.authorId? Будут ли какие-либо проблемы, если я использую тот же формат с веб-сервисом? (author_id)

    Примечание: Я могу легко преобразовать имя с помощью только одной строки кода на стороне сервера. Итак, любой из них в порядке, просто хочу сделать все правильно и избежать будущей проблемы.

  2. Как я могу установить значение динамически. Я считаю, что должен быть способ сделать это. Я пробовал следующий код, но не повезло

    [book performSelector:selector] = [book objectForKey:key];

Примечание: Причиной этого является то, что веб-сервис находится в стадии разработки, его база данных была обновление ежедневно.

Редактировать

Найдено решение для вопроса 2

[book performSelector:sel withObject:value]; 

Что я должен сделать, чтобы преобразовать AUTHOR_ID в setAuthor_id (или AuthorID к setAuthorId) каким-то образом.

ответ

0

Что касается вашего второго вопроса, вы используете xcode для создания визуальной карты ваших объектов базы данных? в книге? (похоже, вы это сделали), а затем создайте объект NSManagedObject для своего объекта книги. т.е. Book.hm

Затем вы можете получить доступ/изменить атрибут вашего объекта bookObject с помощью точечной нотации, т. е. bookObject.name = [book ObjectForKey: @ "name"]; bookObject.id = [book ObjectForKey: @ "id"] и т. д., так как вашими атрибутами книги будут свойства, определенные в книге Book.hm.

Для вашего первого вопроса xCode автоматически сделает это для вас, когда вы создадите NSManagedObject в своей книге или других объектах. Это зависит от того, как вы добавляете/устанавливаете объект своего объекта книги, если вы установите его как author_id, тогда вы можете получить к нему доступ как book.author_id.

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