0

クラスに関数があります。

-(void)receiveFileName:(NSNotification *) notification {
[self dismissViewControllerAnimated:YES completion:nil];
NSString *selectedFileURL = [notification.userInfo valueForKey:@"selectedFile"];
NSString *fileName = [[selectedFileURL lastPathComponent] stringByDeletingPathExtension];
NSData *fileData = [NSData dataWithContentsOfFile:selectedFileURL];

}

テーブルビューコントローラーからファイルの宛先URLを受け取り、fileName文字列とNSDataを生成するために必要ですが、デバッグを行ったところ、NSData部分でキャッチされ、次のエラーが発生します。

-[NSURL getFileSystemRepresentation:maxLength:]:認識されないセレクターがインスタンス0x1f507830に送信されました

selectedFileURLを印刷すると、

2012-08-14 21:58:01.309 Share Me[4546:907] file://localhost/var/mobile/Applications/B87D9131-2E73-4117-9EE8-32EA7E19127D/Documents/mza_9195653795305984944.320x480-75.jpg

そして、ファイル名を印刷すると、次のようになります。

2012-08-14 21:58:01.309 Share Me[4546:907] mza_9195653795305984944.320x480-75.jpg

allocとinitを使用してみましたが、問題は解決しませんでした。助言がありますか?

4

2 に答える 2

0

文字列変数(たとえば、selectedFileURL)がNSURLsでないことを確認します。次のように使用できますisKindOfClass:

assert([selectedFileURL isKindOfClass:[NSString class]] && "not actually a string!");
于 2012-08-15T02:05:17.377 に答える
0

selectedFileURLはNSStringではなくNSURLインスタンスです。おそらく、使用しているフレームワーク/ライブラリのドキュメントを誤解している可能性があります。クイックソリューション:

NSData *fileData = [NSData dataWithContentsOfURL:selectedFileURL];

NSData *fileData = [NSData dataWithContentsOfFile:[selectedFileURL path]];

ヒント:オブジェクトが文字列ではなく、最初からURLオブジェクトであることはすでにご存知でしょう。これfile://はファイル用の特別なURLスキームです。パスを含むNSStringインスタンスは、このプレフィックスで始まらず、プレーン形式/path/to/file.extです。

于 2012-08-15T05:09:44.917 に答える