2014-06-06 63 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比之前分配的列表更早被调用。我只是改变了继续从视图到视图。

相关问题