0

我正在尝试将 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

4 回答 4

1

myData 不是 UTF-8 编码的。

从 NSString 文档:

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

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

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

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

于 2013-09-29T19:12:18.903 回答
0

更改编码,例如 NSUTF16StringEncoding

于 2014-01-03T21:58:14.303 回答
0

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

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

NSString *urlString = [dictionary valueForKey:@"url"];
于 2013-09-29T19:41:24.250 回答
0

你的字符串返回 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];
}
于 2016-04-11T07:18:03.903 回答