这几乎是概念应用的证明。当我使用以下命令启动其他应用程序时,我试图简单地传递NSArray值:
UIApplication *test = [ UIApplication sharedApplication ];
BOOL found =
[ test openURL:[ NSURL URLWithString:@"myCalculator://data" ] ];
我想用包含三个整数的NSArray替换“data”。在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时,确实会调用它。所以,我有问题。当我打开自定义URL时,如何编码NSArray并将其传入?而且,我如何在上面的appDelegate方法中解码它?
任何帮助将不胜感激。我在文档中找不到任何关于如何将NSArray编码传递到自定义URL方案而在接收端解码的文档。
另外,我是初学者,所以细节越多越好。
答案 0 :(得分:2)
一种选择是构建查询字符串:
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];
网址如下:
myCalculator://数据V = 1&安培; V = 2及V = 3
其中1,2,3将是数组中的实际值。
在handleOpenURL
方法中,您需要解析此网址以获取值。
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
数组已经从另一个应用程序传递了您的值。
答案 1 :(得分:1)
您需要将Array转换为字符串,然后在另一个应用程序上执行相反操作。
NSString *Array2String = [myArray componentsJoinedByString:@"|"];
NSArray *String2Array = [Array2String componentsSeparatedByString:@"|"];
当然,您需要仔细选择一个字符串,该字符串将用作您不会在现有数组中使用的标记(如果它包含字符串值)