将NSData转换为NSUrl nil字符串参数

时间:2013-09-29 19:05:16

标签: ios

我正在尝试将NSdata转换为NSUrl,我在互联网上找到了这种方法:

NSString *urlString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
    NSURL *url = [[NSURL alloc] initWithString:urlString];
    [session sendResourceAtURL:url withName:@"Resource" toPeer:peerID withCompletionHandler:nil];

似乎对我很好,但应用程序在第二行崩溃并给出错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initWithString:relativeToURL:]: nil string parameter'

无法理解......

4 个答案:

答案 0 :(得分:1)

myData不是UTF-8编码的。

来自NSString docs:

  

如果由于某种原因初始化失败,则返回nil(例如   如果数据不代表编码的有效数据。)

你应该经常检查这种情况......

NSString *urlString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSURL *url;
if (urlString) {
     url = [[NSURL alloc] initWithString:urlString];
} else {
    // handle failure
}

此外,请确保在创建myData对象时使用UTF8编码,或从NSUTF8StringEncoding切换到正确的编码类型。

答案 1 :(得分:0)

如果来自[NSKeyedArchiver archivedDataWithRootObject:dict]的dict是NSDictionary类,那么你必须从该字典中提取urlString。

NSError* error;
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseData  options:kNilOptions error:&error];

NSString *urlString = [dictionary valueForKey:@"url"];

答案 2 :(得分:0)

更改编码,比如NSUTF16StringEncoding

答案 3 :(得分:0)

你的String返回null尝试这些方法

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@".png"];
[fileManager createFileAtPath:fullPath contents:myData attributes:nil];

if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath])

{

    NSURL *imageUrl = [NSURL fileURLWithPath:fullPath isDirectory:NO];
}