2014-06-06 61 views
0

我創造了這樣的一個ios7單:iOS的單viewDidLoad中的空和viewDidAppear不

SharedData.h

@interface SharedData : NSObject 
{ 
} 

+ (id)sharedInstance; 

@property (strong, nonatomic) NSMutableArray *list; 

@end 

SharedData.m

#import "SharedData.h" 

@implementation SharedData 
@synthesize list; 

// Get the shared instance thread safe 

+ (SharedData *)sharedInstance { 
    static dispatch_once_t once = 0; 
    static SharedData *sharedInstance = nil; 
    dispatch_once(&once, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 
    return sharedInstance; 
} 

- (id)init { 
    self = [super init]; 

    if (self) { 
     //initialize 
     list = [[NSMutableArray alloc] init]; 
    } 

    return self; 
} 

@end 

我總是使用此代碼訪問此課程:

SharedData *sharedData = [SharedData sharedInstance]; 

現在的問題是,當我切換viewDidLoad方法中的視圖列表是空的,但在我的viewDidAppear方法一切都很好。有任何想法嗎?

編輯: 這是我的代碼是如何變化的看法:

SharedData *sharedData = [SharedData sharedInstance]; 
//clear feed and add new feed 
[sharedData.list removeAllObjects]; 
[sharedData.list addObjectsFromArray:newList]; 

//show new gui 
[self.navigationController performSegueWithIdentifier:@"goToMain" sender:self]; 

注:我從一個普通視圖控制器推到一個TabBarController - > NavigationController - > TableViewController顯示列表。

回答

0

你如何從一個viewController更改爲另一個? Wich類是你的目的地ViewController的父母,

如果你正在修改prepareForSegue方法中的視圖的屬性...你迫使視圖加載。

例如,您正在設置您的單例列表prepareForSegue,但在設置列表之前,您正在修改目標viewController的屬性。 (像destVC.view = XXXdestVC.viewControllers = XX,如果你是繼承一個UITabBarViewController ...)然後你觸發了viewDidLoad方法,並且在你將列表設置爲正確的值之前它正在執行。

或者,也許你正在尋找兩個不同的地方到destinationViewController。而當viewDidLoad發生時,你還沒有更新單例列表。

下面是聊天與問題的海報轉錄:http://chat.stackoverflow.com/transcript/55218

+0

我用代碼編輯了問題。我用segue執行開關。我應該在哪裏放置[self.tableView reloadData]? viewDidAppear已經太晚了。這給了一個醜陋的過渡 – perotom

+0

嗯......它似乎是正確的,你可以在這裏發佈您的prepareForSegue代碼? 在執行'performSegueWithIdentifier'之前,您是否檢查過單身人員列表是否正確加載? – gabuh

+0

我不使用performSegueWithIdentifier方法。這是一個故事板賽車模式和翻轉。是的,檢查它。它是正確的。感謝您的幫助! – perotom

0

我想你有這兩個視圖 - 控制方法之間的困惑:

-(void)viewDidLoad{ 
    // 
} 

&

-(void) viewDidAppear{ 
    // 
} 

viewDidAppear是每次視圖更改時調用的方法,但viewDidLoad是不是必需的方法每次你的觀點發生變化時,都會打電話給你

ViewDidLoad方法在視圖第一次加載時被調用,之後它不會被調用直到視圖被刪除/釋放。

P.S:我建議你把斷點放在你的viewDidLoad和viewDidAppear方法中,並感覺它。你的答案就在那裏。

希望這可以幫助你很多。

祝你好運。

+0

我在兩種方法中記錄了列表的計數。每個方法被調用,但在viewDidLoad中計數= 0,並在viewDidAppear計數= 20 – perotom

0

問題是我創建了一個從按鈕到下一個視圖的segue。正因爲如此,viewDidLoad比之前分配的列表更早被調用。我只是改變了繼續從視圖到視圖。

相關問題