通过委托,我创建了一个视图控制器,它从文本字段中获取输入并将其传回并将其添加到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是什么,以及为什么它没有持有传递给它的任何新对象,任何帮助都会受到赞赏。