Я работаю над функцией получения данных 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 правильно. Но вопрос в том.
Для веб-сервиса (Ruby On Rails), мы обычно называют с строчными буквами, заменить пространство подчеркивания (author_id). Но здесь, в Objective-C, удалите пробел и замените первый символ каждого слова на верхний регистр (authorId). Итак, каково должно быть имя объекта сущности, book.author_id или book.authorId? Будут ли какие-либо проблемы, если я использую тот же формат с веб-сервисом? (author_id)
Примечание: Я могу легко преобразовать имя с помощью только одной строки кода на стороне сервера. Итак, любой из них в порядке, просто хочу сделать все правильно и избежать будущей проблемы.
Как я могу установить значение динамически. Я считаю, что должен быть способ сделать это. Я пробовал следующий код, но не повезло
[book performSelector:selector] = [book objectForKey:key];
Примечание: Причиной этого является то, что веб-сервис находится в стадии разработки, его база данных была обновление ежедневно.
Редактировать
Найдено решение для вопроса 2
[book performSelector:sel withObject:value];
Что я должен сделать, чтобы преобразовать AUTHOR_ID в setAuthor_id (или AuthorID к setAuthorId) каким-то образом.