将对象添加到nsmutablearray不起作用,任何添加的对象都从我的tableview

时间:2017-04-06 23:55:50

标签: ios objective-c uitableview delegates nsmutablearray

通过委托,我创建了一个视图控制器,它从文本字段中获取输入并将其传回并将其添加到nsmutablearray,为其成功添加一行。每当我离开tableview时,我新添加的对象就会消失。这里有一些代码可以让你更好地了解我可能做错了什么。

TableViewController.h -

@interface TableViewController : UITableViewController<UITableViewDelegate, UITableViewDataSource> 

@property(strong,nonatomic)NSMutableArray *codeList; 
@property(strong,nonatomic)NSMutableArray *codeArray;

@end

TableViewController.m -

@interface TableViewController ()
@end

@implementation MCTableViewController

@synthesize codeList;
@synthesize codeArray;

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    self.codeList = [NSMutableArray arrayWithObjects:@"Array",
                                               @"Pointer",
                                               @"Class",
                                               @"Protocol",
                                               @"Delegate",
                                               nil];


    self.codeDescArray = [NSMutableArray arrayWithObjects:
                                                  @"Array Description",
                                                  @"Pointer Description",
                                                  @"Class Description",
                                                  @"Protocol Description",
                                                  @"Delegate Description",
                                                  nil];
)

在同一个类中,我以编程方式创建了一个按钮,该按钮移动到应该传回数据的视图。代码如下。这是通过授权来完成的。

- (void)addNewCodeButtonPressed {
    AddNewCodeVC *addVC = [[AddNewCodeVC alloc] init];
    addVC.dataDelegate = self;
    UINavigationController *navBar = [[UINavigationController alloc]initWithRootViewController:addVC];
    [self.navigationController presentViewController:navBar animated:YES completion:nil];
}

这是在AddNewCodeVC.h中创建委托逻辑的地方 -

#import <UIKit/UIKit.h>
#import "TableViewController.h"

@class AddNewCodeVC;
@protocol addNewCellData <NSObject>
- (void)sendDataToTableView:(NSString*)code codeDesc: (NSString*)desc;
@end

@interface AddNewCodeVC :  UIViewController<UITextFieldDelegate> {
    __weak id dataDelegate;
}

@property(weak,nonatomic)id<addNewCellData>dataDelegate;
@property(strong,nonatomic)UITextField *codeTextfield;
@property(strong,nonatomic)UITextField *descTextfield;

@end

最后这里是AddNewCodeVC.m -

#import "AddNewCodeVC.h"

@interface AddNewCodeVC ()

@end

@implementation AddNewCodeVC

@synthesize dataDelegate;

- (void)viewDidLoad {
    [super viewDidLoad];

    self.codeTextfield.delegate = self;
    self.descTextfield.delegate = self;

//Programmatically created both textfields, nothing special

}

//"saveNewCode" is action for another button i created
- (void)saveNewCode    {   
    sendDataToTableView:self.codeTextfield.text codeDesc:self.descTextfield.text];
    [self.dataDelegate sendDataToTableView:self.codeTextfield.text codeDesc:self.descTextfield.text];
    NSLog(@"CODE: %@", self.codeTextfield.text);
    NSLog(@"DESC: %@", self.descTextfield.text);
    [self dismissViewControllerAnimated:YES completion:nil];
}

代码可以工作,但是如果我离开TableViewController,则nsmutable数组不会保存传递的值。我认为这是因为我的主视图控制器以编程方式分段到tableview控制器并创建它的新实例,这可能会产生一些影响?我会在下面留下一些代码,以防它相关。

MainviewController.m -

- (void) tableViewBtnPressed:(UIBarButtonItem *)sender {

    TableViewController *tableVC = [[TableViewController alloc] init];
    //This for another delegate I created, not relevant
    tableVC.selectedDataDelegate = self;
    UINavigationController *navBar = [[UINavigationController alloc]initWithRootViewController:tableVC];
    [self.navigationController presentViewController:navBar animated:YES completion:nil];
}

希望这段代码足以说明问题,我希望有人知道NSMutableArray是什么,以及为什么它没有持有传递给它的任何新对象,任何帮助都会受到赞赏。

0 个答案:

没有答案