1

この質問は 2 日に 1 回聞かれることを知っています。私は何が間違っているのかわかりません。ストーリーボード ナビゲーション コントローラー ベースのアプリがあります。

私の通知とポップ/プッシュセグエはうまく機能しますが、唯一のことは、親ビュー 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];
}

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 にオブジェクトを追加するにはどうすればよいですか?

4

2 に答える 2

0

親ビューオブジェクトの割り当てを除いて、すべてが良好なようです。ストーリーボードについてはあまり詳しくありませんが、ナビゲーションナビゲーションコントローラーを使用しているとのことです。

だからこれを変更する

 _crereaatePlistTableViewController=[[CreaatePlistTableViewController alloc]init];

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

うまくいくかもしれませんがわかりません

于 2012-11-06T18:14:31.003 に答える
0

あなたはこれを書きました。

[_crereaatePlistTableViewController.presenterList addObject:writer.XMLString];

配列を初期化したことがありますか? いいえ。デバッガを使用すると、この行で presenterList が nil であることがわかります。

今ではスタイルのポイントとして。NSNotificationCenter を使用してデータを渡したり、他のオブジェクトに信号を送ったりすることは避けてください。@TheRonin は便利なリンクを提供してくれました。これらは解決済みの問題であるため、セグエに関するいくつかのチュートリアルも検討する必要があります。

これは、興味深いと思われる別の関連記事です。

于 2012-11-06T15:45:39.777 に答える