Как получить данные в iOS, чтобы сохранить множественный доступ
То, что я пытаюсь сделать в настоящее время, в основном, у меня есть 2 приложения, и в зависимости от того, установлено другое или нет, ведут себя определенным образом. Я наткнулся на Pasteboard для связи между приложениями, поэтому подумал, что должен их использовать. Ну вот проблема, оба приложения делают что-то вроде этого
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"com.company.app.key" create:YES];
[pasteboard setPersistent:YES];
NSData *data = [pasteboard dataForPasteboardType:@"com.company.otherapp"];
if(data != nil)
{
// Do stuff
}
NSData *selfKey = [pasteboard dataForPasteboardType:@"com.company.thisapp"];
if(data == nil)
{
[pasteboard setValue:@"string" forPasteboardType:@"com.company.thisapp"];
}
Поэтому я установил одно приложение и запустил другое, и в первый раз, когда он работал, данные не были равны нулю, и если я преобразовал NSData в NSString с помощью инициализатора NSString с NSData, я прочитал "string".
Проблема в том, что все, что я делаю, это закрываю второе приложение, запускаю его снова, и внезапно данные становятся равными нулю. Сначала я подумал, что после того, как я обращаюсь к нему, монтажная доска просто удаляет его, поэтому я добавил следующую строку в // Делать вещи
[pasteboard setValue@"string" forPasteboardType:@"com.company.otherapp"];
Нет данных все равно ноль, если я запускаю приложение во второй раз. Мне нужно, чтобы строка оставалась в Pasteboard навсегда, так как это все, что я должен сказать, установлено ли мое другое приложение или нет, поэтому у кого-нибудь есть идеи, почему данные возвращают ноль только после 1 запуска?
Я должен отметить, что все, что я делаю, - это нажимаю кнопку "Домой", а затем снова запускаю приложение, поэтому ситуация
-Run приложение1
-Запустить приложение2 (получает данные из Pasteboard)
нажмите кнопку домой
-Запустить приложение2 (данные сейчас ноль)
2 ответа
Так что я понял, почему app2 не может увидеть его снова. Что делает setValue: forPasteboardType, так это то, что он перезаписывает первый элемент в Pasteboard. Поэтому каждый раз, когда я запускал свои приложения, они перезаписывали ключи друг друга в монтажном столе.
Решение состоит в том, чтобы использовать элемент множественного монтажа в классе для поиска индекса типа вставки и получения данных из него.
Когда вы загружаете ваш картон, вы должны установить его как постоянный. После первой строки в вашем коде выше добавьте:
pasteboard.persistent = YES;