簡體   English   中英

iOS單例viewDidLoad為空並且在viewDidAppear上不顯示

[英]iOS singleton viewDidLoad empty and on viewDidAppear not

我在ios7中創建了一個單例,如下所示:

SharedData.h

@interface SharedData : NSObject
{
}

+ (id)sharedInstance;

@property (strong, nonatomic) NSMutableArray    *list;

@end

共享數據

#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];

注意:我從普通的ViewController推到TabBarController-> NavigationController-> TableViewController以顯示列表。

您如何從一個viewController更改為另一個? Wich類是目標ViewController的父類嗎?

如果要在prepareForSegue方法中修改視圖的屬性, prepareForSegue強制加載視圖。

例如,您要在prepareForSegue中設置單身人士的列表,但是在設置列表之前,您要修改目標viewController的屬性。 (如果要對UITabBarViewController進行子類化,請執行諸如destVC.view = XXXdestVC.viewControllers = XX 。)然后,您將觸發viewDidLoad方法,該方法將在將列表設置為正確值之前執行。

或者,也許您在兩個不同的地方與destinationViewController爭吵。 並且當viewDidLoad發生時,您仍未更新單例上的列表。

這是與問題發布者的聊天記錄: http : //chat.stackoverflow.com/transcript/55218

我猜您在這兩個viewcontroller方法之間有混淆:

-(void)viewDidLoad{
    //
 }

-(void) viewDidAppear{
    //
}

viewDidAppear是每次視圖更改時都會調用的方法,而viewDidLoad是每次視圖更改時不一定調用的方法。

首次加載視圖時,將調用ViewDidLoad方法,此后直到刪除/釋放視圖后才調用ViewDidLoad方法。

PS :我建議您將斷點放在viewDidLoad和viewDidAppear方法中並感受一下。 您的答案就在那里。

希望這對您有很大幫助。

祝好運。

問題是我創建了一個按鈕,從按鈕轉到下一個視圖。 因此,viewDidLoad的調用早於分配的列表。 我只是將segue更改為從一個視圖到另一個視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM