2012-11-06 50 views
1

我知道這個問題每兩天問一次。我看不出我做錯了什麼。 我有一個基於故事板導航控制器的應用程序。如何將數據傳遞給父視圖IOS

我的通知和流行/推塞格運作良好,唯一的是我不能添加字符串父母查看NSmutablearray。

我想添加一個字符串對象到父視圖的nsmutablearray。我體面的代碼沒有傳遞任何數據。

parent.h

@interface CreaatePlistTableViewController : UITableViewController<UITableViewDelegate, UITableViewDataSource>{ 

    NSMutableArray *presenterList; 

} 
@property (nonatomic, strong) NSMutableArray *presenterList; 

parent.m

NSString * const NOTIF_CreatePlist_UpdateTableview= @"CreatePlist/UpdateTableview"; 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
* Private interface definitions for update tableview 
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
@interface CreaatePlistTableViewController (private) 
- (void)CreatePlistUpdateTableview:(NSNotification *)notif; 
@end 

@implementation CreaatePlistTableViewController 
@synthesize presenterList=_presenterList; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _presenterList=[[NSMutableArray alloc] init]; 

    // Register observer to be called when logging out 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(CreatePlistUpdateTableview:) 
               name:NOTIF_CreatePlist_UpdateTableview object:nil]; 

    NSLog(@"Presenter List: %@", _presenterList); 

} 


- (void)CreatePlistUpdateTableview:(NSNotification *)notif{ 
    NSLog(@"Notification recieved"); 
    NSLog(@"Presenter List: %@", _presenterList); 
    [_createPlistTableview reloadData]; 
} 

child.h

@interface AddPresenterViewController : UITableViewController<UITextFieldDelegate,UIAlertViewDelegate>{ 
    CreaatePlistTableViewController *crereaatePlistTableViewController; 
} 
@property(nonatomic,strong) CreaatePlistTableViewController *crereaatePlistTableViewController; 

child.m

@synthesize crereaatePlistTableViewController=_crereaatePlistTableViewController; 
//finished adding presenter 
-(IBAction)finishedAddingPresenter:(id)sender{ 

    //some xml string here 
    NSLog(@"final result XML:\n%@", writer.XMLString); 


    _crereaatePlistTableViewController=[[CreaatePlistTableViewController alloc]init]; 
    //add object to parents view data source 
    [_crereaatePlistTableViewController.presenterList addObject:writer.XMLString]; 

    //dismiss the view 
    [self.navigationController popViewControllerAnimated:YES]; 

    //notify the parent view to update its tableview 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"CreatePlist/UpdateTableview" object:nil]; 

}

輸出

Notification recieved 
Presenter List: (
) 

所以通知的作品,當我按一下按鈕。但它不會將對象傳遞給nsmutablearray。

我在做什麼錯在這裏?我如何添加一個對象到父視圖的nsmutablearray?

+0

你如何將父控制器傳遞給子控制器? (即孩子的crereaatePlistTableViewController指向同一個父實例嗎?) – giorashc

+0

我不會傳遞任何數據到子視圖,但我推推視圖推子視圖。除了我的切換和通知方法似乎只能工作的問題是它不會將字符串添加到父母nsmutablearray –

+0

停止使用通知並開始使用塊:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/Blocks /文章/ bxUsing。html – TheRonin

回答

0

,似乎一切都只是你的父視圖對象我不那麼熟悉的故事板的頁頭不錯,但你說你正在使用導航導航控制器

所以改變這種

_crereaatePlistTableViewController=[[CreaatePlistTableViewController alloc]init]; 

_crereaatePlistTableViewController= [self.navigationController.viewControllers objectAtIndex:0]; 

它可能工作我不知道

+0

爲什麼我的分配方法不起作用?這不是一種常規方式嗎? –

0

你寫這個。

[_crereaatePlistTableViewController.presenterList addObject:writer.XMLString]; 

你有沒有初始化數組?不。使用調試器,你會看到在這一行presenterList是零。

現在作爲一個風格點。避免使用NSNotificationCenter傳遞數據或傳遞其他對象。 @TheRonin給了一個方便的鏈接。你也應該看看Segues上的一些教程,因爲這些都是解決的問題。

This is another related post that you might find interesting.

+0

實際上,我做父母視圖viewdidload初始化我的數組。我已經添加了viewdidload函數來問題 –

+0

和作家和XMLString?他們是否爲零? –

+0

不,我可以看到一個常規的xml字符串與NSlog,根據回答有可能是我的父類對象分配有問題 –

相關問題