0

メイン ビューにがあり、ユーザーが別のオブジェクトをテーブルビューに追加できるようにする別のビューにプッシュするUITableView「追加」ボタンがあります。UINavigationBarこのビューには、情報をメイン ビューに送り返すためのプロトコルがあります。

私の問題は、プロトコルから送信されたこの新しいオブジェクト ( NSMutableDictionary) をNSMutableDictionaryメイン ビューのプロパティに追加しようとすると、追加されないことです。を追加しようとしましたNSLogが、このオブジェクトは であると表示されますnull。メソッドでこのオブジェクトを初期化すると、ビューがポップviewDidLoadされるたびに実行UINavigationControllerされ、ディクショナリ内のすべてがリセットされます。オブジェクトを初期化して、すべてが格納されていることを確認する場所がわかりません。

プロトコルは正常に動作しますが、送信されたオブジェクトに対して何もできません。

AddCellViewController.h で:

#import <UIKit/UIKit.h>

@protocol AddCellDelegate <NSObject>
@required
-(void)passCellInfo:(NSMutableDictionary *)cellInfo;

@end

@interface AddCellViewController : UITableViewController <UITextFieldDelegate> {
id <AddCellDelegate> delegate;
}
@property (strong) id <AddCellDelegate> delegate;
@end

AddCellViewController.m (プロトコルを利用するメソッド):

-(void)sendObject{


    [[self delegate] passCellInfo:newCellInfo];

    [self.navigationController popToRootViewControllerAnimated:YES];


}

MainView.m で:

-(void)passCellInfo:(NSMutableDictionary *)cellInfo{

    [self.cellInformation setValue:cellInfo forKey:[cellInfo objectForKey:@"cell_title"]];
    [self.cells addObject:[cellInfo objectForKey:@"cell_title"]];
    [self.tableView reloadData];
    NSLog(@"%@: cellInfo - cellInformation: %@ - cells: %@",cellInfo ,self.cellInformation,self.cells); //logs the object passed from the protocol (this works), the cellInformation object, and cells object (these return null)

}
4

2 に答える 2

0

静的またはグローバル クラスで NSMutableDictionary プロパティを使用でき、テーブルビューまたはその他のビューから非常に簡単にアクセスできます。

  • その辞書からテーブルにフィードします
  • そして、他のビューからそのディクショナリに要素を追加します (プロトコルはもう必要ありません)。

tableView が表示されるたびに、このグローバル クラスからテーブルのデータを更新する必要があります。

使用方法の例: グローバル静的クラスの実装方法

于 2013-05-23T11:19:27.520 に答える
0

あなたのコードでは、これを行います。毎回同じキーを使用しています。なので交換になります。

[self.cells addObject:cellInfo];

代わりに簡単な方法を教えます。mutableDictionary を init メソッドから secondView に送信します。クラス レベルの mutableDictionary にコピーします。割り当てまたは初期化しないでください。その Dictionary に新しい項目を追加します。mainView辞書に反映されます。mainView の viewWillAppear メソッドで [tableView reloadData] を呼び出します。

于 2013-05-23T11:20:49.607 に答える