我正在尝试将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'
无法理解......
答案 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];
}