Преобразование 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.

Другие вопросы по тегам