对于那些经历过这个问题但还没有发现任何相关内容的人来说,我已经到处看了所以我觉得我自己也会问这个问题......
我有一个自定义对象(HitterData),我将用它来填充UITableView中的单元格,然后是两个ViewControllers(一个是hitterTableViewController,另一个是"详细信息"视图控制器标记为" AddPlayerViewController& #34;。)
问题是我可以将HitterData对象添加到表VC中的NSMutableArray中,但只有一个,然后当我使用详细视图控制器添加另一个时,Mutable数组被重新初始化"而且我一次只能有一个物体。
HitterObject:
@implementation HitterData.m
@synthesize hitterName = _hitterName;
@synthesize position = _position;
-(id)initWIthNameAndPosition:(NSString *)hitterName position:(NSString *)position {
if ((self = [super init])) {
self.hitterName = _hitterName;
self.position = _position;
}
return self;
}
HitterTableViewController.h
#import "HitterData.h"
#import "HitterDoc.h"
#import "AddPlayerViewController.h"
@interface HitterTableViewController : UITableViewController
@property (nonatomic, strong) NSMutableArray *hitters;
- (IBAction)backButton:(id)sender;
- (IBAction)addPlayerView:(id)sender;
-(void)addHitterObject:(HitterData *)hitter;
HitterTableViewController.m(仅与使其更具可读性相关)
@implementation HitterTableViewController
@synthesize hitters = _hitters;
- (void)viewDidLoad {
[super viewDidLoad];
self.hitters = [NSMutableArray array];
}
-(void)addHitterObject:(HitterData *)hitter {
if(_hitters != nil) {
[_hitters addObject:hitter];
} else {
_hitters = [NSMutableArray array];
[_hitters addObject:hitter];
NSLog(@"MutableArray is not valid");
}
}
AddPlayerViewController.h
@interface AddPlayerViewController : UIViewController <UITextFieldDelegate, UINavigationControllerDelegate>
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;
@property (weak, nonatomic) IBOutlet UITextField *positionTextField;
@property (nonatomic) HitterTableViewController *hitterTable;
@property (nonatomic) NSString *hitterName;
@property (nonatomic) NSString *position;
//-(void)addNewHitterToHittersArray:(HitterData *)hitter;
- (IBAction)addPlayerToRoster:(id)sender;
AddPlayerViewController.m
@implementation AddPlayerViewController
@synthesize hitterTable;
- (void)viewDidLoad {
[super viewDidLoad];
hitterTable = [[HitterTableViewController alloc] init];
}
- (IBAction)addPlayerToRoster:(id)sender {
self.hitterName = [self.nameTextField text];
self.position = [self.positionTextField text];
HitterData *hitter = [[HitterData alloc] init];
hitter.hitterName = self.hitterName;
hitter.position = self.position;
[hitterTable addHitterObject:hitter];
ArraySingleton *arrayS = [[ArraySingleton alloc] init];
[arrayS initializeArray];
[arrayS addToHittersArray:hitter];
if (arrayS) {
NSLog(@"arrayS exists in AddPlayerVC");
} else {
NSLog(@"arrayS does not exist");
}
[self performSegueWithIdentifier:@"backToTeamTableViewController" sender:self];
}
我在这里错过了什么吗?
答案 0 :(得分:0)
AddPlayerViewController
应该对HitterTableViewController
一无所知,使用委托方法返回新的HitterData对象。
- (IBAction)addPlayerToRoster:(id)sender
{
Hitter *hitter = [[Hitter alloc] init];
hitter.name = [self.nameTextField text];
hitter.position = [self.positionTextField text];
[self.delegate didAddHitter:hitter];
}
然后回到HitterTableViewController
- (void)didAddHitter:(Hitter *)hitter
{
[self.hitters addHitter:hitter];
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 1 :(得分:0)
根据显示的代码猜测:
每次您想要添加播放器时,您似乎都会创建新的AddPlayerView
/ AddPlayerViewController
。反过来,控制器在其viewDidLoad
中创建一个新 HitterTableViewController
- 当然它有自己的空数组。代码应该引用现有的HitterTableViewController
。
BTW:所有这些@synthesise
语句都是不需要的。在现代的Obj-C中,合成是自动的,你很少需要这些陈述。此外,通常建议不要直接使用属性支持变量,当存储到属性时肯定不会,因为这会破坏KVO。 (在HitterData.m
中似乎也有相关的拼写错误,但由于你没有报告它不起作用,它可能只是你问题中的拼写而不是代码。)
HTH