2017-01-12 4 views
5

Я разрабатываю приложение iPad, в котором мне нужно создать несколько NSURLRequest. Когда это не удается, мне нужно снова запустить этот URL-запрос.Можем ли мы хранить NSURLRequest непосредственно в Core Data?

У меня есть три типа (создать школу, создать пол и создать комнаты) запроса, которые содержат несколько параметров, разных create Request.

Существует метод повторного запроса, который может срабатывать при наличии Интернета с тем же объектом, который был создан по первому запросу.

Итак, я пытался создать три таблицы, и я пытался сохранить все параметры с их статусом.

Возможно ли создать единую таблицу с NSURLRequest независимо от CREATE REQUEST?

+3

Вы не можете хранить 'NSURLRequest' непосредственно в Core Data. Вы можете хранить только экземпляры NSManagedObject. Вы можете создать объект, который позволяет вам хранить информацию, необходимую для воссоздания запроса. – Paulw11

+1

'NSURLRequest' является' NS (Secure) Coding' Compliant, поэтому его следует перевести в 'NSData'. Это возможность. – Larme

+0

@ Larme Вы говорите, что нам нужно преобразовать запрос NSURL в тип NSData. верный? Если он хранится в DB как NSData, чем мы знаем, какой запрос отправляется на сервер. Нужно ли расшифровывать NSData и отправлять на сервер? –

ответ

1

Объекты основных данных соответствуют объектам NSManagedObject или подклассу NSManagedObject, поэтому вы не можете просто сохранить URL-запросы напрямую. Что вы можете сделать, так это создать объект, называемый как SavedRequest, который имеет свойство, представляющее запрос URL-адреса, и, возможно, некоторые другие подробности о запросе (какая бы другая информация вам ни понадобилась - дата, может быть?).

С NSURLRequest соответствует NSCoding, вы должны создать это свойство, используя «Трансформируемый» тип данных ядра. Core Data будет использовать NSCoding для автоматического преобразования в/из NSData по мере необходимости. Вы должны присвоить свойство NSURLRequest и прочитать их обратно, а Core Data сохранит их как NSData.

Учитывая ваше описание, Core Data может не иметь смысла. Похоже, вы просто хотите сохранить список запросов URL, а затем прочитать его и не нуждаетесь в дополнительных функциях, предоставляемых Core Data. Было бы проще разместить объекты NSURLRequest в массиве, а затем сохранить этот массив в файл или по умолчанию для пользователя. Вы бы конвертировали в/из NSData самостоятельно, но так как вы можете использовать NSCoding, это легко.

Чтобы сохранить массив, который вы хотите сделать что-то вроде этого, предполагая, что массив называется myArray, содержащие запросы URL и путь в filePath:

BOOL success = [NSKeyedArchiver archiveRootObject:myArray toFile:filePath]; 

Вы хотите получить массив обратно, используя

NSArray *savedRequests = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; 
0

Возможно, вы только что можете сохранить absoluteString свойства NSURLRequest URL. Или у каждого из них есть отдельные тайм-ауты или политики кэширования?

0

Да, это возможно, по крайней мере, с Swift. С помощью Swift вы можете получить доступ к свойству Transformable в CoreData. Используя это свойство, можно поместить любые данные в Core Data. Это даже без дополнительных накладных расходов.

ВИДЕТЬ отличный учебник http://geekyviney.blogspot.nl/2015/02/transformable-binary-data-properties-in.html

+0

Swift не имеет понятия «трансформируемое» свойство. У Core Data есть один. –

+0

Правильно, перефразировал ответ. – Vincent

2

Так что я придумал свою собственную идею, я делюсь со всеми.

Как я читал и отправляю в Google, я не могу хранить NSURLRequest в основных данных. потому что я не знаю тип объекта.

я буду создавать основную таблицу данных с помощью колоночного PARAMS, методов, URL

Так можно создать таблицу, которая будет содержать столбец PARAMS (Словарь), методы (PUT, GET и т.д.), URL.

Что я буду делать, чтобы преобразовать параметры DICT в NSKeyedArchiver и сохранить его в столбце PARAM. URL и МЕТОДЫ в отдельной колонке.

Когда мне понадобится запрос на сохранение, я могу взять его из таблицы и отправить на сервер.

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