Синтаксис для передачи NSArray в другое приложение с настраиваемой схемой URL-адресов

Это в значительной степени доказательство концепции приложения. Я пытаюсь просто передать NSArray значений, когда запускаю другое приложение, используя:

UIApplication *test = [ UIApplication sharedApplication ]; BOOL found = [ test openURL:[ NSURL URLWithString:@"myCalculator://data" ] ]; 

Я хочу заменить «данные» на NSArray, содержащий три целых числа. В myCalculator я реализовал эти методы в делегате:

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"Open application called in calculator"); return [ self application:application handleOpenURL:url ] ; } // Depracted - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSLog(@"%@",application.debugDescription); return YES; } @end 

Что действительно называется, поскольку я открываю URL-адрес из другого приложения. Итак, у меня есть вопросы. Как я могу кодировать NSArray и передавать его при открытии пользовательского URL? И как я могу его декодировать в вышеупомянутых методах appDelegate?

Любая помощь будет оценена. Я не могу найти ничего в документации, в которой говорится о том, как кодировать NSArray для передачи в пользовательскую схему URL-адресов или декодировать ее на принимающей стороне.

Кроме того, я новичок, поэтому чем больше деталей, тем лучше.

Одним из вариантов является построение строки запроса:

 NSMutableString *query = [NSMutableString string]; for (id val in myArray) { if (query.length) { [query appendString:@"&"]; [query appendFormat:@"v=%@", val]; } NSString *urlStr = [@"myCalculator://data?" stringByAppendingString:query]; NSURL *url = [NSURL URLWithString:urlStr]; 

URL-адрес будет выглядеть так:

MyCalculator: // Данные V = 1 & v = 2 & v = 3

где 1, 2, 3 будут действительными значениями в массиве.

В методе handleOpenURL вам нужно проанализировать этот URL, чтобы получить значения.

 NSString *query = [url query]; NSArray *parts = [query componentsSeparatedByString:@"&"]; NSMutableArray *values = [NSMutableArray array]; for (NSString *part in parts) { NSRange equal = [part rangeOfString:@"="]; NSString *value = [part substringFromIndex:equal.location + equal.length]; [values addObject:value]; // If you want the value as a string [values addObject:[NSNumber numberWithInt:[value intValue]]]; // If you want the value as a number } 

Теперь массив values имеет ваши значения, переданные из другого приложения.

Вам нужно преобразовать свой массив в строку, а затем сделать обратное в другом приложении.

  NSString *Array2String = [myArray componentsJoinedByString:@"|"]; NSArray *String2Array = [Array2String componentsSeparatedByString:@"|"]; 

Конечно, вы должны быть осторожны, чтобы выбрать строку, которая будет использоваться как маркер, который вы не будете использовать в существующем массиве (если он содержит строковые значения)

  • Как пройти FBAccessToken для веб-просмотра в iOS
  • Показать LocationMediaItem в JSQMessagesViewController
  • Изменение высоты заголовка UICollectionView в IBAction
  • Снимок экрана UIImage теряет качество
  • UITableViewCell Custom Добавить в избранную кнопку
  • «Сбросить» приложение в состояние по умолчанию
  • Какой кодер следует использовать для кодирования длинного свойства с помощью NSCoder?
  • removeObjects из RLMResults
  • Как отображать документы в виде сетки значков?
  • In-App Purchase по-прежнему не работает почти через неделю после выпуска
  • iOS Присутствует Popover из нижней части панели инструментов
  • Давайте будем гением компьютера.