2012-03-13 2 views
0

연구 후 나는 나를 도울 수있는 sigleton을 발견했지만 어떻게 작동하는지 이해해야한다. 2 개의 클래스가 서로 comunicate해야합니다. 예 : 나는 tableView라는 필드가 다이나믹 (dinamic)입니다. 이제Objective-C : 클래스 간 통신 방법은 무엇입니까?

- (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; 
} 

:

-(void)ottieniMarche{ 

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

} 

지금 난 내 mainTableView.m 광고를 실제로 사용하고 코드에이 정보를 보내야 할이된다 이 viewController.h 파일에 내 코드입니다 responseSimulate 값을 사용하여 elementMainTableView 값을 변경해야합니다. 내 maintableView의 내용이 내 responseSimulate와 동일하다는 것을 의미합니다.

답변

1

질문을 올바르게 이해하면 모델 변경 내용을 바탕으로 UITableView의 내용을 새로 고침하고 싶습니다. UITableView

는 행 및 섹션 데이터를 제공하기 UITableViewDataSource 프로토콜에 맞는 클래스를 필요로한다. 보통은 UITableViewController이지만 그럴 필요는 없습니다. UITableView의 데이터 소스는 사용자가 참조하는 다른 클래스가 될 수 있습니다. 이 경우 데이터를 다시로드 할 때 [tableView reloadData]과 같은 데이터를 다시로드하는 것이 중요합니다. 귀하의 경우에는

, 당신의 MainTableViewUITableViewDataSource 프로토콜을 준수 (나는이 ... 실제로 UITableViewController 서브 클래스 추론하고있어), 당신은 키 - 값 예를 들어 관찰 사용하여 문제를 해결할 수있는 경우 : ( 이 예는 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.