2012-01-02 23 views
0

我想打開使用發送的NSDictionary用的OpenURL

[[UIApplication sharedApplication]openURL:[[NSURL alloc]initWithString:myString]]; 

日誌的其他應用程序myString就像

NSString *myString=[NSString stringWithFormat:@"testHandleOpenUrl://?%@",@"123"]; 

它工作正常,但如果我嘗試使用NSDictionary

NSString *myString=[NSString stringWithFormat:@"testHandleOpenUrl://?%@",userInfo]; 

失敗而沒有錯誤

希望你能幫助我。

回答

0

嘗試枚舉字典中的所有元素並將它們附加到您的URL。

NSMutableString *params = [[[NSMutableString alloc] init] autorelease]; 

NSEnumerator *keys = [userInfo keyEnumerator]; 

NSString *name = [keys nextObject]; 
while (nil != name) { 

    [params appendString: name]; 
    [params appendString: @"="]; 
    [params appendString: [userInfo objectForKey:name]]; 

    name = [keys nextObject]; 

    if (nil != name) { 
     [params appendString: @"&"]; 
    } 
} 

NSString *myString=[NSString stringWithFormat:@"testHandleOpenUrl://?%@",params]; 
0
NSString * paramString = @""; 
int i = 0; 
for(NSString * key in [userInfo allKeys]){ 
    NSString * value = (NSString*)[userInfo objectForKey:key]; 
    NSString * valueParam = [NSString stringWithFormat:@"%@%@=%@",(i==0)[email protected]"?":@"&",key,value]; 
    paramString = [paramString stringByAppendingString:valueParam]; 
    i++; 
} 
NSString *myString=[NSString stringWithFormat:@"testHandleOpenUrl://%@", paramString]; 
+0

不,我想發送整個userInfo。因爲我不能確定userinfo中的什麼樣的信息我會得到 – Starbax 2012-01-02 15:49:45

+0

如果你需要的全部信息,你應該解析NSDictionary到一個JSON字符串(與SBJson或JSONKit)和base64編碼的JSON字符串(mayb與http: //stackoverflow.com/questions/392464/any-base64-library-on-iphone-sdk)。您現在可以使用base64編碼的JSON字符串追加該URL。 – CarlJ 2012-01-02 15:56:17

+0

他是對的,你應該編碼這個,因爲它會在一個URL中。我還假定每個鍵/值都是字典中的字符串,但情況可能並非如此。 – 2012-01-02 15:59:24

0

當您在格式字符串中使用一個NSDictionary,你看起來像這樣的URL:

testHandleOpenUrl://?{ 
    bar = foo; 
} 

呼籲USERINFO -description的結果只是被代替%@。據推測,你想傳遞URL中字典中包含的參數。可能是這樣的:

NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:@"bar", @"foo", nil]; 
NSString *myString=[NSString stringWithFormat:@"testHandleOpenUrl://?foo=%@", [userInfo objectForKey:@"foo"]]; 
NSLog(@"myString: %@", myString); // prints "myString: testHandleOpenUrl://?foo=bar" 
相關問題