我正在研究一个函数,以从我的Web服务中获取JSON数据,比方说,书籍。下面是一个例子JSONCoreData属性动态命名和设置实体属性
"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"
},
]
我想数据保存到源码的方式是这样的
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 ***
通过这样做,我没有手动设置每个属性的值。我只需更新应用程序迁移以与Web服务器匹配,请确保JSON是正确的。但问题是。
对于Web服务(Ruby on Rails),我们通常以小写字母命名,用下划线替换空格(author_id)。但在这里,在Objective-C中,删除空格并用大写字母(authorId)替换每个单词的第一个字符。那么,实体属性名称应该是book.author_id还是book.authorId?如果我在Web服务中使用相同的格式,会不会有问题? (author_id)
注意:我只需在服务器端使用一行代码即可轻松转换名称。所以,其中任何一个都没问题,只是想把它做好,避免将来出现问题
如何动态设置数值。我相信一定有办法做到这一点。我想下面的代码,但没有运气
[book performSelector:selector] = [book objectForKey:key];
注:每天这背后的原因是,Web服务目前正在开发,其数据库已经更新。
编辑
发现问题2
[book performSelector:sel withObject:value];
我所要做的就是AUTHOR_ID转换为setAuthor_id(或AUTHORID到setAuthorId)莫名其妙的解决方案。