1

我知道这个问题每两天被问一次。我看不出我做错了什么。我有一个基于故事板导航控制器的应用程序。

我的通知和弹出/推送 segues 运行良好,唯一的问题是我不能将字符串添加到父母视图 NSmutablearray。

我想向父视图的 nsmutablearray 添加一个字符串对象。我体面的代码没有传递任何数据。

父母.h

@interface CreaatePlistTableViewController : UITableViewController<UITableViewDelegate, UITableViewDataSource>{

    NSMutableArray *presenterList;

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

父母.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];
}

孩子.h

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

孩子.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?

4

2 回答 2

0

你写了这个。

[_crereaatePlistTableViewController.presenterList addObject:writer.XMLString];

你有没有初始化数组?不。使用调试器,您会看到在这一行,presenterList 为 nil。

现在作为一种风格。避免使用 NSNotificationCenter 来传递数据或向其他对象发送信号。@TheRonin 提供了一个方便的链接。您还应该查看一些关于 Segues 的教程,因为这些都是已解决的问题。

这是您可能会觉得有趣的另一篇相关文章。

于 2012-11-06T15:45:39.777 回答
0

似乎一切都很好,除了你分配的父视图对象我对故事板不太熟悉,但你说你正在使用导航导航控制器

所以改变这个

 _crereaatePlistTableViewController=[[CreaatePlistTableViewController alloc]init];

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

我不确定它可能会起作用

于 2012-11-06T18:14:31.003 回答