Сначала хороший день и спасибо, что нашли время ответить на мой вопрос.
Некоторые предыстории: я сделал то же самое в обычной программе OS X в том, что я запускаю все в main.m
Что я делаю:
созданиеОЧЕНЬ грубое приложение, которое добавляет текстовое поле FirstName и LastName.Пользователь вводит некоторый текст, и когда он нажимает добавить в адресную книгу, программа получает информацию о строке и добавляет ее в NSMutableArray
, как я сказал ОЧЕНЬ грубо, но для целей обучения.
Что не так:
Файлы AddressBook.h и AddressBook.m
AddressBook.h
#import <Foundation/Foundation.h>
@interface AddressBook : UIViewController
{
NSMutableArray *nameArray;
}
@property (nonatomic, copy) NSMutableArray *nameArray;
@end
AddressBook.m
#import "AddressBook.h"
@implementation AddressBook
@synthesize nameArray;
@end
примечания и комментарии
Итак, я получаю, что я создаю класс с именем AddressBook, и у него есть NSMutableArray
Я знаю, что если я хочу создать новыйобъект, который является частью класса AddressBook. Я бы назвал его в main.m следующим образом: AddressBook * newAddressBook = [AddressBook new];newAddressBook.nameArray = [NSMutableArray array];тогда я мог бы делать то, что я хочу.Я успешно создал такую программу, но не версию для iPhone.
BIDViewController.h
#import <UIKit/UIKit.h>
#import "AddressBook.h"
@interface BIDViewController : UIViewController
{
AddressBook *myBook;
UITextField *firstNameField;
UITextField *lastNameField;
NSString *tester;
id myTempBook;
}
//@property (retain, nonatomic) AddressBook *myBook;
@property (retain, nonatomic) IBOutlet UITextField *firstNameField;
@property (retain, nonatomic) IBOutlet UITextField *lastNameField;
@property (copy, nonatomic) NSString *tester;
@property (retain, nonatomic) id myTempBook;
- (IBAction)addToAddressButton:(id)sender;
- (IBAction)textFieldDoneEditing:(id)sender;
- (IBAction)displayAddress:(id)sender;
@end
BIDViewController.m
#import "BIDViewController.h"
@implementation BIDViewController
@synthesize lastNameField, firstNameField, tester;
//@synthesize myBook;
@synthesize myTempBook;
- (IBAction)textFieldDoneEditing:(id)sender
{
//keyboard stuff
//give control back to view
[sender resignFirstResponder];
}
- (IBAction)displayAddress:(id)sender
{
//display address book array
}
- (IBAction)addToAddressButton:(id)sender
{
//add the names to array
//here is what I want to do
[myBook.nameArray addObject:lastNameField.text];
//ever time I NSLog the array with objectAtIndex:0
//it returns null. I've tried EVERY combinations of stuff I even tried
//allocating a new array
//such as myBook.nameArray = [NSMutableArray array]; and I still could not return anything but null :(
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
//myBook.nameArray = [NSMutableArray array];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
@end
Мой вопрос:
что я делаю не так, потому что выполнил ту же самую концепцию, но запустил программу в main.m.
Мне кажется, я понимаю, что происходит ...
- Программа iPhone загружает BIDViewController, когда пользователь нажимает на значок приложения.
- , поскольку BIDViewController инициализируется, он создает myBook, который является объектом в классе AddressBook.он автоматически получает и устанавливает с @synthesize
- , мой BIDViewController видит, что он создан, и я могу без проблем записывать в массив, однако где-то по пути я продолжаю получать нулевые возвраты.
Другие примечания
Я могу поделиться своей программой, где я успешно выполнил то, что хотел в приложении не для iPhone, а в простой версии командной консоли.