2014-08-30 59 views
0

在我的iOS應用程序中,我在AddPersonViewController類中向前聲明瞭「Person」類,如下所示。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 

但是,當我嘗試從代碼中調用Person對象如下,我發現人是零,即使self.nameTextField.text預期返回字符串:

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

我猜想,這是關於初始化'人',但我不確定它。關於問題和解決方案的任何想法?預先感謝您

+0

這與前向聲明有什麼關係?它接近問題是你meber創建了一個Person對象並將其分配給了person屬性。 – 2014-08-30 21:09:22

回答

1

與@property得到你支持iVar _person,和人的getter方法和setPerson設置方法,但你沒有得到一個Person對象。這是默認和設計。如果你希望它不是零,你應該在類的init方法中初始化它。

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

請記住,在Objective-C中,您可以將消息發送給未初始化的對象,並且不會收到錯誤消息。我用來解決這些情況的一個很好的做法是「if(object)NSLog(@」something「);'' – Scott 2014-08-30 22:10:19

+0

你好,謝謝你的回答。然而,即使我添加了建議的初始化,我仍然有同樣的問題。莫弗,當我在你提出的if語句中出現斷點時,我注意到它沒有被擊中。 – emkay 2014-08-31 09:17:15

+0

然後,您的視圖控制器子類永遠不會被使用。通常這與XCode中InterfaceBuilder中VC對象的「自定義類」不匹配您的VC類有關。如果您嘗試以編程方式加載VC,那麼您需要發佈有關該問題的代碼。 – stevesliva 2014-08-31 19:28:55