2015-11-06 45 views
0

我有2個視圖控制器-1用於輸入來自用戶的值,另一個用於在表格視圖中顯示值。編碼去如下:何傳遞值使用通知?

這是用於顯示由所述通知傳遞的值:

ListTableViewContrller.m

@property(strong,nonatomic)NSMutableArray *namearray; 
@end 

@implementation ListTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(receieveTestNotificatiom:) name:@"TestNotification" object:nil]; 


} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
-(void)receieveTestNotificatiom:(NSNotification *)notification 
{ 
    _namearray=[[NSMutableArray alloc]initWithObjects:[notification.userInfo objectForKey:@"USERNAME"], nil]; 
    [self.tableView reloadData]; 
} 



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return _namearray.count; 

} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellreuse" forIndexPath:indexPath]; 


    cell.detailTextLabel.text=[_namearray objectAtIndex:indexPath.row]; 

    return cell; 
} 

這對於在命名爲視圖控制器從所述用戶輸入數據source.m -

- (IBAction)senddata:(id)sender 
{ 
    NSDictionary *dict=[NSDictionary dictionaryWithObject:_nametextfield.text forKey:@"USERNAME"]; 
    [[NSNotificationCenter defaultCenter]postNotificationName:@"TestNotification" object:nil userInfo:dict]; 
} 

當我嘗試運行我的應用程序,它不顯示在表視圖控制器輸入的值。爲什麼這樣?在此先感謝......

+0

什麼r esult你得到在Namearray –

+0

我得到在文本字段中輸入的值。 –

+0

你可以顯示/打印你的名字陣列,你的編碼是好​​的,但它錯過了索引 –

回答

0

不喜歡和嘗試這個

- (void)viewDidLoad { 
[super viewDidLoad]; 
// allocate the memory here 
_namearray=[NSMutableArray new]; 
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(receieveTestNotificatiom:) name:@"TestNotification" object:nil]; 


} 

-(void)receieveTestNotificatiom:(NSNotification *)notification 
{ 



    NSString *value = [NSString stringwithFormat:@"%@",[notification.userInfo objectForKey:@"USERNAME"]]; 

    NSLog(@"%@ value", [notification userInfo]); 
    [_namearray addobject:value]; 
[self.tableView reloadData]; 
} 
+0

告訴我你在這裏得到的結果NSLog(@「%@ value」,[notification userInfo]); –

+0

o/p顯示我在文本字段中輸入的文本...但它不在表格中顯示 –

+0

是的,先生它正在工作,但只要我輸入第二個名稱,它就會擦除表中的第一個名稱。爲什麼這樣? –

0

您的代碼看起來不錯。但是您是否真的想在每次收到通知時重新實例化陣列?或者你想實例化陣列只有一次,然後添加值,你通過通知?如果最後是你想要的這裏是我的解決方案:

接收tableviewcontroller

@interface TableViewController() 

@property (strong, nonatomic) NSMutableArray *names; 

@end 

@implementation TableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.estimatedRowHeight = 44.0; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedNotification:) name:@"NEW_NAME_NOTIFICATION" object:nil]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.names.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NameCell" forIndexPath:indexPath]; 
    cell.textLabel.text = self.names[indexPath.row]; 
    return cell; 
} 

- (void)receivedNotification:(NSNotification *)notification { 
    [self.names addObject:notification.userInfo[@"value"]]; 
    [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.names.count - 1 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; 
} 

- (NSMutableArray *)names { 
    if (!_names) { 
    _names = [NSMutableArray array]; 
    } 
    return _names; 
} 

@end 

視圖 - 控制該帖子通知

@interface NewNameViewController() 

@property (weak, nonatomic) IBOutlet UITextField *textField; 

@end 

@implementation NewNameViewController 

- (IBAction)doneBarButtonItemTapped:(UIBarButtonItem *)sender { 
    [self.presentingViewController dismissViewControllerAnimated:YES completion:^{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NEW_NAME_NOTIFICATION" object:nil userInfo:@{@"value": self.textField.text}]; 
    }]; 
} 

@end 
+0

先生你沒有說我在哪裏編碼問題? –

+0

我說「你的代碼看起來不錯」。我看不到任何錯誤。也許問題是你沒有發佈的代碼的其他部分?!你想分享一些,所以我可以幫忙嗎? –