Преобразование JSON в NSManagedObject
Я получаю JSON от веб-службы, которую мне нужно сохранить локально с помощью Core Data. Это часть операции синхронизации, которая выполняется после определенного интервала. Мне нужно сначала преобразовать JSON в NSManagedObject и проверить, сохранено ли оно уже локально, а затем просто обновить существующее, в противном случае вставить новый NSManagedObject.
NSManagedObject проверяется, сохранен ли он уже или нет. также может иметь отношения с другими NSManagedObjects (которые также должны быть частью предиката)
Может кто-нибудь предложить какую-нибудь значительную библиотеку для обработки этой десериализации / сериализации из / в JSON <-> NSManagedObject.
3 ответа
Я использую RestKit для этой цели, он довольно прост в использовании
@Eugen
RestKit кажется сложным. Мне пришлось разобрать довольно сложный JSON и сохранить в Core data. Также данные на сервере могут измениться, и при следующем разборе локальные значения данных ядра должны быть обновлены, а не вставлены новые.
Но при вызове веб-службы мне нужно пройти аутентификацию, установив HTTP-заголовок user=access_token, password=mypassword.
В RestKit есть только один метод для запроса и сопоставления непосредственно с managedObject, и только этот метод не работает должным образом при отправке запроса. Я получаю 403 ответа. Все остальные методы, которые не связаны с NSManagedObject, проверяют подлинность и получают хороший JSON в ответе.
Я потратил столько времени, пытаясь заставить RESTKIT работать, и теперь я чувствую, что должен попробовать какой-то простой способ. Может кто-нибудь предложить какую-нибудь хорошую библиотеку или любые другие предложения.
Спасибо.
Что касается RestKit: я предпочитаю выполнять вызовы веб-сервисов, как описано здесь: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html
Что касается вашей проблемы десериализации: вы можете преобразовать объект NSData, полученный веб-службой, в структуру JSON, например:
NSMutableDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
Затем вы можете использовать https://gist.github.com/pkclsoft/4958148 для заполнения NSManagedObject следующим образом:
Entity *entity = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:[self managedObjectContext]];
[entity populateFromDictionary:dict];
Если структура json и структура NSManagedObject различаются, вы можете манипулировать NSMutableDictionary перед использованием его для заполнения NSManagedOject.