0

「newPlayerVC」でUIIMagePickerControllerを取得しました。これにより、サムネイル画像(100x100ピクセルにサイズ変更した後)が問題なくAssetLibraryに保存されます。

画像を保存した直後に、AssetLibraryをもう一度呼び出して、保存したばかりの画像を取得してユーザーに表示します(また、正常に機能することを確認します)。その呼び出しは次のようになります。

// Display new thumbnail via AssetLIbrary call
    __block UIImage *_image = nil;
    [assetLib assetForURL:(playerImageURL)
              resultBlock:^(ALAsset *asset) {
                  _image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
                  NSLog(@"Got the asset thumbnail, %@",_image);
                  [playerImageButton setImage:_image forState:UIControlStateNormal];
              }

             failureBlock:^(NSError *error) {
                 NSLog(@"Asset (image) fetch failed because %@",error);
             }];

これまでのところ、問題なく動作します。 端末の確認ログには、「p.playerImage = Assets-library://asset/asset.JPG?id = A79242D5-BC91-490B-BC37-0A9F529675EE&ext = JPG」と「アセットのサムネイルを取得しました、UIImage:0xcb5b8a0」-soアセットライブラリから画像を取得していることはわかっています。

しかし、次に、「playerTableVC」から非常によく似た呼び出しを実行して、以前に保存した画像をテーブルビューに入力し、カスタムセルのUIViewに追加しようとします。これは機能しません(カスタムセルは静止画像で問題ありません)。また、Xcodeからもエラーや警告は表示されません。そのコードは、関数 "-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath"から次のようになります。

// Set up Asset library
ALAssetsLibrary *assetLib = [[ALAssetsLibrary alloc]init];

__block UIImage *_image = nil;
[assetLib assetForURL:[NSURL URLWithString:p.playerImage]
          resultBlock:^(ALAsset *asset) {
              _image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
              NSLog(@"Got the asset thumbnail, %@", _image);
          }

 failureBlock:^(NSError *error) {
     NSLog(@"Asset fetch failed: %@",error);
 }];

// If no cell, create new
if (cell == nil) {
    cell = [[CellPlayer alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

// If cell present, assign values
NSLog(@"p.playerImage = %@", p.playerImage);  // Check = ok

// Check if imageurl is empty = default image else the user choosen image
if ([p.playerImage isEqualToString:@""]) {
    cell.cellPlayerIcon.image = [UIImage imageNamed:@"defaultImageFrame_114x114"];
    // Add sortingorder ("player position") to tableview
    cell.cellPlayerStarIcon.text = [NSString stringWithFormat:@"%i", (indexPath.row +1)];
} else {
    cell.cellPlayerIcon.image = _image;  // = NO IMAGE IN CELL?
    // Add sortingorder ("player position") to tableview
    cell.cellPlayerStarIcon.text = [NSString stringWithFormat:@"%i.", (indexPath.row +1)];
}

cell.cellPlayerName.text = p.playerName;
cell.cellPlayerTime.text = p.playerTime;
cell.cellPlayerTimestamp.text = [NSString stringWithFormat:@"%@", p.playerTimeStamp];  // @"2012-10-01 @ 8:06";

return cell;

}

上のセルにデータを入力する際のUIIMageの設定に問題があると思います。他のすべては、静的UIImageでも問題なく機能します。これの多くのバリエーションを試しましたが、最終的に「コードフラインド」になったことを私は知っていると信じています... ;-)

解決策、ヒント、ポインタなどはありますか?ありがとう :-)

4

1 に答える 1

0

解決しました!

ブロックが上記の「_image」変数の画像を保持していなかったことが判明しました。ブロック内のUIImage「myImage」などのローカル変数に「_image」を渡して保持するだけで簡単に解決できます。これで問題なく動作し、私のセルは期待どおりにアセットライブラリから画像を取得します:-)

于 2012-11-19T10:14:17.133 に答える