2012-03-13 15 views
0

研究の後、私は助けてくれるかもしれないが、どのように動作するのか理解するためにはいくつか問題がある。 私は2つのクラスがお互いにcomunicateする必要があります、ここでは例: 私はテーブルビューを持っているフィールドはダイナミックです。 これはviewController.hファイルに私のコードです:Objective-C:クラス間の通信方法

-(void)ottieniMarche{ 

    responseSimulate = [[NSArray alloc]initWithObjects:@"pollo",@"cane",@"gatto",@"verme",@"gallo",@"topo",@"canguro",@"elefante",@"giraffa" ,nil]; 

} 

今、私が実際に使用しているコードはこれです私のmainTableView.m広告にこの情報を送信する必要があります:

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 

     elementMainTableView = [[NSArray alloc]initWithObjects:@"aaa",@"bbb",@"ccc",@"ddd",@"eee",@"fff",@"ggg",@"hhh",@"iii" ,nil]; 

    } 
    return self; 
} 

私はresponseSimulate値でelementMainTableView値を変更する必要があります。私は私のmaintableViewの内容が私のresponseSimulateと同じであることを意味します。

答えて

1

ご質問が正しく分かった場合は、モデルの変更内容に基づいてUITableViewの内容を更新します。

UITableViewには、行とセクションのデータを提供するためにUITableViewDataSourceプロトコルに準拠したクラスが必要です。しばしばそれはUITableViewControllerですが、そうである必要はありません。 UITableViewのデータソースは、参照先の他のクラスになる可能性があります。その場合は、データを変更するときに、データをリロードすることを要請するのが鍵です。すなわち、[tableView reloadData]です。あなたのケースでは

あなたMainTableView(私は...これは実際にUITableViewControllerサブクラスである推測だが)UITableViewDataSourceプロトコルに準拠している場合、あなたは、たとえばキー値監視を使用して問題を解決することができ:(この例では、ARCを使用していることを前提とします。)

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if(!self) return nil; 

    elementMainTableView = [[NSArray alloc] initWithObjects:@"aaa",@"bbb",@"ccc",nil]; 
    [self addObserver:self forKeyPath:@"elementMainTableView" options:NSKeyValueObservingOptionNew context:NULL]; 
    return self; 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context; 
{ 
    if([keyPath isEqualToString:@"elementMainTableview"]) 
    { 
     [[self tableView] reloadData]; 
    } 
} 

これは、あなたがMainTableViewのプロパティとしてelementMainTableViewを公開することを前提としています。他のクラス(?ViewControllerを)あなたの方法で今

、このために

-(void)ottieniMarche { 
    responseStimulate = [[NSArray alloc] initWithObjects:@"pollo",@"cane",@"gato",nil]; 
    _mainTableViewController.elementMainTableView = responseStimulate; 
} 

作業には、あなたは、例えば、MainTableViewへの参照を維持するために、あなたのViewControllerが必要になります上記の_mainTableViewController