addObject到NSMutableArray不适用于故事板

时间:2013-12-10 22:28:49

标签: objective-c arrays storyboard nsmutablearray

我的根视图控制器中有一个表,其中“添加”按钮映射到另一个视图控制器,该控制器具有输入列表名称的文本字段和保存按钮。该保存按钮被映射回主控制器。当数据传回主控制器时,它不会将该项添加到表中。

这是我的表视图控制器的viewDidLoad的样子:

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     self.tableView.allowsMultipleSelectionDuringEditing = YES;

     if (!self.listArray) self.listArray = [[NSMutableArray alloc] init];
     [self.listArray addObject:@"New Item"];
     [self.tableView reloadData];

     [self updateButtonState];
  }

这会将“New Item”添加到列表中并显示在表格中。但是当我从segue传递listname时,我可以看到日志条目“添加...”,但不会将该项添加到表中。这是从segue添加新项目的方法。

-(void) addList:(NSString *)listName
{
   NSLog(@"Adding %@", listName);
   [self.listArray addObject:listName];
   [self.tableView reloadData];

}

准备segue

  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
     LSNewListViewController *sourceView = [segue sourceViewController];

     LSMainViewController *destView = [segue destinationViewController];
     [destView addList:[[sourceView listName] text]];
  }

1 个答案:

答案 0 :(得分:0)

尝试在“添加”视图控制器中设置协议,而不是使用故事板segue来推送另一个视图控制器。然后将“主”视图控制器设置为委托并处理添加。从那里你可以连接“添加”按钮来调用委托方法并弹出视图控制器。

LSNewListViewController.h

@protocol LSNewListViewControllerDelegate;

@interface LSNewListViewController : UIViewController

@property (nonatomic, weak) id <LSNewListViewControllerDelegate> delegate;

@end

@protocol LSNewListViewControllerDelegate <NSObject>

@optional
- (void)didAddToList:(NSString*)item;

@end

LSNewListViewController.m

@implementation LSNewListViewController

// Hooked up to the Add button in the storyboard (touchUpInside)
- (IBAction)addToListAction:(id)sender {
    if ([self.delegate respondsToSelector:@selector(didAddToList:)]) {
        [self.delegate didAddToList:[sourceView listName] text]];
    }
}

@end

LSMainViewController.h

#import "LSNewListViewController.h"

@interface LSMainViewController : UIViewController <LSNewListViewControllerDelegate>

@end

LSMainViewController.m

@implementation LSMainViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    LSNewListViewController *destView = [segue destinationViewController];
    destView.delegate = self;
}

// Delegate method
- (void)didAddToList:(NSString*)item {
    NSLog(@"Adding %@", listName);
   [self.listArray addObject:listName];
   [self.tableView reloadData];
   [self.navigationController popViewControllerAnimated:YES];
}

@end