0

キャッシュ ディレクトリから写真を読み込もうとしています。

これは、写真をキャッシュ フォルダーに書き込むコードです。

+(BOOL)writeAData:(NSData *)imageData atURL:(NSURL *)fileUrl
{
    return [imageData writeToURL:fileUrl atomically:YES];
}

このコードは正常に動作しますが、キャッシュ フォルダーからコードを読み込もうとすると問題が発生します。

ブロック内で initWithContentsOfURL メソッドを使用します。

     NSData *imageData = [[NSData alloc] initWithContentsOfURL:self.imageUrl];

これはURLの形式です

file://localhost/Users/MarcoMignano/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/0E8E54D8-9634-41CF-934B-A7315411F12F/Library/Caches/image_cache/Meyer%20Library.jpg

URL は正しいのですが、上記の方法を使用しようとすると、次のエラーが発生します。

 ..... [__NSCFString isFileURL]: unrecognized selector sent to instance 0x8a0c5b0 .....

これは、モデルの URL を取得したときのコードです。

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    self.photos = [PhotoAlreadyDisplayed getAllPicture];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([sender isKindOfClass:[UITableViewCell class]]) {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        if (indexPath) {
            if ([segue.identifier isEqualToString:@"Show Image"]) {
                if ([segue.destinationViewController respondsToSelector:@selector(setImageUrl:)]) {
                    NSURL *url = [[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"];
                    [segue.destinationViewController performSelector:@selector(setImageUrl:) withObject:url];
                    [segue.destinationViewController setTitle:[self titleForRow:indexPath.row]];
                }
            }
        }
    }
}

URLの何が問題になっていますか?どうすれば修正できますか?ありがとうございました

私は解決策を見つけました: モデルのURLをロードするとき、fileURLWithPathメソッドを使用してURLを初期化する必要があります:

NSURL *url =  [NSURL fileURLWithPath:[[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"]];

これですべて正常に動作します。ご協力いただきありがとうございます

4

2 に答える 2

0

[NSData initWithContentsOfURL:]渡された引数としてが期待NSURLされています。. ではなく文字列を渡しているようですNSURL。これは事実ですか?

編集:ユーモアを交えて-置き換えてみてください

NSData *imageData = [[NSData alloc] initWithContentsOfURL:self.imageUrl];

NSData *imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageUrl]];

何が起こるのですか?


から正常に戻ってきたようには見えませんinitWithContentsOfURL:が、以下のスニペットは他の人に役立つかもしれません:

NSError *error;
NSData *data = [[NSData alloc] initWithContentsOfURL:TestURL options:0 error:&error];
if(data) {
  NSLog(@"Success");
}
else {
  NSLog(@"Failed: %@", Error);
}
于 2013-08-23T09:42:59.707 に答える
0

解決策: モデルの URL をロードするとき、fileURLWithPath メソッドを使用して URL を初期化する必要があります。

NSURL *url =  [NSURL fileURLWithPath:[[self.photos objectAtIndex:indexPath.row] valueForKey:@"url"]];

これですべて正常に動作します。ご協力いただきありがとうございます

于 2013-08-23T17:26:18.680 に答える