我寫了一個iPhone應用(iOS 7,Xcode5),發現從的viewController類之一一些奇怪的行爲(TrackDetailsViewController):視圖 - 控制的財產消失viewDidLoad中被調用後
當這種觀點是被叫我通過一個跟蹤項目與我通過prepareForSegue方法契約的一些信息。現在,當我檢查viewDidLoad方法中的Track Item時,它存在並且擁有我期望的所有數據。然而,當我在viewDidAppear檢查一遍軌道項目已變爲零(見下面的代碼):
TrackDetailsViewController.h:
@interface TrackDetailsViewController : UIViewController <UIScrollViewDelegate>
@property (weak, nonatomic) Track *track;
@end
TrackDetailsViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
//check for track
if (_track !=nil) {
NSLog(@"track not nil");
}
else{
NSLog(@"no track");
}
// Do any additional setup after loading the view.
}
-(void) viewDidAppear: (BOOL) animated{
//check for track
if (track != nil) {
NSLog(@"track not nil");
}
else{
NSLog(@"no track");
}
}
現在運行此代碼後(在顯示相關視圖之後)的日誌看起來像:
2013-09-28 16:25:31.877 I-Sail[1388:c07] track not nil
2013-09-28 16:25:32.235 I-Sail[1388:c07] no track
因此,在viewDidLoad和viewDidAppear之間的某處,track屬性的值更改爲null。
之後,整個事情變得更加怪異,因爲當我向.m文件添加一個變量track2並將track屬性的值分配給track2變量時,track屬性保持其值,因此,下面的代碼:
Track *track2;
- (void)viewDidLoad
{
[super viewDidLoad];
//check for track
if (_track !=nil) {
NSLog(@"track not nil");
}
else{
NSLog(@"no track");
}
//assign the value of _track to the track2 variable
track2 = _track;
}
-(void) viewDidAppear: (BOOL) animated{
//check for track
if (_track !=nil) {
NSLog(@"track not nil");
}
else{
NSLog(@"no track");
}
}
這一次的輸出變爲:
2013-09-28 16:35:57.929 I-Sail[1452:c07] track not nil
2013-09-28 16:35:58.286 I-Sail[1452:c07] track not nil
所以財產軌道保持其價值,我可以在的viewController類的其他方法使用它。
有沒有人遇到類似這樣的問題,對此行爲進行一些解釋?或者找到比創建虛擬變量更優雅的解決方法?
乾杯!
是的,強大的它完美的作品!謝謝! –