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];

私には問題ないように思えますが、アプリは 2 行目でクラッシュし、次のエラーが表示されます。

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

[NSKeyedArchiver archivedDataWithRootObject: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

エンコーディングを変更します。たとえば、NSUTF16StringEncoding に変更します

于 2014-01-03T21:58:14.303 に答える