Objective C componentsSeparatedByString

时间:2016-06-22 09:28:09

标签: javascript ios objective-c string

我正在尝试使用window.location将JavaScript从JavaScript传递到Objective C. 我的JavaScript代码如下所示:

var str = "http://sampleurl:8080/abc";
window.location.href = "jscall:myapp:"+str;

在目标C中:

NSString *requestString = [[request URL] absoluteString];
NSArray *components = [requestString componentsSeparatedByString:@":"];

if ([components count] > 1 &&
    [(NSString *)[components objectAtIndex:0] isEqualToString:@"jscall"]) {
    if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myapp"])
    {
      NSLog([components objectAtIndex:2]); //this returns just "http"

        NSString* str1 = (NSString *)[components objectAtIndex:2];
        NSString* str2 = (NSString *)[components objectAtIndex:3];            
        NSString* str3 = (NSString *)[components objectAtIndex:4];
        str2 = [str2 stringByAppendingString:@":"];
        str2 = [str2 stringByAppendingString:str3];           
        str1 = [str1 stringByAppendingString:@":"];
        self.jsLbl.text = [str1 stringByAppendingString:str2];
        //The output of this is "http://sampleurl:8080/abc"
    }
    return NO;
}

如果我只使用

  NSString* str1 = (NSString *)[components objectAtIndex:2];

我只得到“http”。 如何限制字符串以限制componentsSeparatedByString 2?

3 个答案:

答案 0 :(得分:2)

您无法明确地仅拆分前两次出现的':',但您可以轻松做的就是使用另一种方法,因为您确切知道该字符串到底是什么' http'。只做以下其中一项是安全的。

NSString *urlString = [requestString stringByReplacingOccurrencesOfString:@"jscall:myapp:" withString:@""];

NSUInteger prefixLength = @"jscall:myapp:".length;
NSString *urlString = [requestString substringFromIndex:prefixLength];

第二个更可靠,因为某些原因在请求中多次出现该字符串。

答案 1 :(得分:0)

请勿使用componentsSeparatedByString:来解析网址。使用NSURLComponents

答案 2 :(得分:0)

你通常不会这样做:

var str = "http://sampleurl:8080/abc";
window.location.href = "jscall:myapp:"+str;

您改为使用自定义方案,以便您的代码可以检查如何处理网址,例如:

var str = "myapplink://sampleurl:8080/abc";
window.location.href = str;

并且您的obj-c代码将检查该方案,然后使用该URL,如果您需要,则用其他方法替换该方案。