1

デリゲートによって作成された ALAsset の所有権に問題があります。私のデリゲートはモーダル ビューであり、それを閉じると ALAsset が返されますが、アセットはデリゲートより長く存続する必要があります。
デリゲート コールバックでは、単純に ALAsset を取得して、アプリの制御シングルトンが所有する NSMutableArray に配置します。[OrderManager sharedOrderManager]

-(void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingPictureWithAsset:(ALAsset *)asset    
{
    [[[[OrderManager sharedOrderManager] currentOrder] assets] addObject:asset];
}

後で (デリゲートが却下された後)、配列内のアセットを使用してテーブル ビューを作成します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Photos View Cell Identifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UIButton *imageButton;
    imageButton = (UIButton *)[cell.contentView viewWithTag:kImageButton_TAG];
    ALAsset *imageAsset = [[[[OrderManager sharedOrderManager] currentOrder] assets] objectAtIndex:indexPath.section];
    [imageButton setImage:[UIImage imageWithCGImage:[asset aspectRatioThumbnail]] forState:UIControlStateNormal];
    return cell;
}

もちろん、デリゲートはもはや存在せず、デリゲートはアセットの所有者であるため、*imageAsset現在は nil ポインターです。私の質問は、テーブル ビュー コントローラーまたはsharedOrderManagerALAsset の所有者を作成するにはどうすればよいですか?

編集:明確にするために、私はARCを使用しています。

4

1 に答える 1

0

NSMutableArray*によって返されたが初期化されていることを確認しassetsます (おそらく、シングルトン実装またはその後に呼び出される他のメソッドで)。

それはそうであり、何も返すことができnilないように見えます。追加されたオブジェクトを保持するため、自分でオーバーリリースするまで解放しないでください。addObject:objectAtIndex:NSMutableArray

于 2012-05-18T13:00:45.297 に答える