2013-10-08 4 views
0

Я получаю JSON из веб-службы, которую мне нужно сохранить локально с помощью Core Data. Это часть операции синхронизации, которая выполняется после определенного интервала. Мне нужно сначала преобразовать JSON в NSManagedObject и проверить, сохранено ли оно локально, а затем просто обновить существующее, иначе вставить новый NSManagedObject.Преобразование JSON в NSManagedObject

Проверяется объект NSManagedObject, независимо от того, сохранен он или нет. могут также иметь отношения с другими NSManagedObjects (которые также должны быть частью предиката)

Может ли кто-нибудь предложить какой-либо значительный lib для обработки этой десериализации/сериализации из/в JSON < -> NSManagedObject.

ответ

1

я использую RestKit для этих целей, это довольно простой в использовании

+0

Спасибо за предложение. Я проверю его, чтобы посмотреть, делает ли он то, что я ищу. На данный момент я использую модифицированную версию JAGPropertyConverter, но в моем случае это было не очень хорошо. – Anand

+0

Обновление: разработка была впереди, чтобы внести серьезные изменения и реализовать RestKit. Мне удалось решить проблему, изменив библиотеку JAGPropertyConvert. Спасибо за ваш ответ. Возможно, в следующем проекте я буду использовать это. – Anand

0

@Eugen

RestKit кажется сложным. Мне пришлось разбирать довольно сложные JSON и сохранять данные Core. Также данные на сервере могут измениться, и при следующем анализе локальные значения данных ядра необходимо обновить, а не вставлять новые.

Но при вызове веб-службы мне необходимо выполнить аутентификацию, установив HTTP-заголовок user = access_token, password = mypassword.

В RestKit существует только один метод для запроса и сопоставления непосредственно с managedObject, и только этот метод не работает должным образом при отправке запроса. Я получаю 403 ответа. Все другие методы, которые не связаны с NSManagedObject, аутентифицируются и получают хороший JSON в ответе.

Я потратил столько времени на то, чтобы сделать работу RESTKIT, и теперь я чувствую, что должен попробовать простой способ. Может ли кто-нибудь предложить любую хорошую lib или любые другие предложения.

спасибо.

0

Относительно 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.

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