2014-08-30 5 views
0

В моем приложении iOS у меня есть объявление класса Person в моем классе AddPersonViewController следующим образом.Объект Obj-C null

@protocol PersonAddDelegate; 
@class Person; 
@interface AddPersonViewController : UIViewController 

@property (nonatomic, unsafe_unretained) id <PersonAddDelegate> delegate; 
@property (nonatomic, strong) Person * person; 

@end 

@protocol PersonAddDelegate <NSObject> 

- (void)AddPersonViewController:(AddPersonViewController *)addPersonViewController didAddPerson:(Person *)person; 

@end 

Но когда я пытаюсь позвонить человеку объект из кода следующим образом, я заметил, что человек равен нулю, даже если self.nameTextField.text возвращает строку, как и ожидалось:

self.person.personname = self.nameTextField.text; 

Я думаю, что это это инициализация «человека», но я не уверен в этом. Любые идеи о проблеме и решении? Заранее спасибо

+0

Для чего это необходимо для форвардной декларации? Это говорит о том, что проблема заключается в том, что вы создали объект 'Person' и присвоили его свойству' person'. –

ответ

1

С помощью @property вы получите поддержку iVar _person, а также метод getter человека и метод setPerson setter, но вы не получите объект Person. По умолчанию и дизайн по умолчанию нет. Если вы хотите, чтобы он был не ноль, вы должны инициализировать его в методе init класса.

@implementation AddPersonViewController 
-(id)init { 
    if (self = [super init]) { 
     _person = [[Person alloc] init]; 
    } 
    return self; 
} 
+0

Помните, что в Objective-C вы можете отправлять сообщения непосвященным объектам, и вы не получите сообщение об ошибке. Хорошая практика, которую я использую для устранения этих ситуаций, заключается в '' if (object) NSLog (@ "something"); '' – Scott

+0

Здравствуйте, Спасибо за ваши ответы. однако, хотя я добавил предлагаемую инициализацию, у меня все еще такая же проблема. Моровер, когда я выхожу из точки останова в заявлении, которое вы предложили, я заметил, что он не попал. – emkay

+0

Подкласс класса просмотра никогда не используется. Часто это связано с «Пользовательским классом» объекта VC в InterfaceBuilder в XCode, не соответствующим вашему классу VC. Если вы пытаетесь загрузить программный код VC вместо этого, вам нужно будет отправить код об этой проблеме. – stevesliva

Смежные вопросы