GData日历执行顺序

时间:2011-05-24 17:03:16

标签: objective-c ios4 google-calendar-api gdata-api

我想知道是否有人对这个问题有解释/解决方案。我正在使用GData API来获取日历信息并将其存储到NSDictionary中,并在以后访问它。但是当我调用函数来获取数据时,似乎在调用函数后日历访问发生了很多行。

在下面的代码中,我立即调用loadGoogleCalendarEvents,它会进行并获取事件并进行更多处理,但我的应用程序正在“跳过”,添加按钮并执行其后的任何其他操作,然后再进行操作得到日历的东西。

有没有人对此有解释?

- (void)viewDidLoad
{    

    self.dayDictionary = [NSMutableDictionary dictionary];
    [self loadGoogleCalendarEvents];

    UIImage* fImage = [UIImage imageNamed:@"facebook_med"];
    CGRect fbuttonFrame = CGRectMake(220, 9, 25, 25);
    UIButton* fButton = [UIButton buttonWithType:UIButtonTypeCustom];
    fButton.frame = fbuttonFrame;
    [fButton addTarget:self action:@selector(pushFacebookButton) forControlEvents:UIControlEventTouchUpInside];
    [fButton setBackgroundImage:fImage forState:UIControlStateNormal];
    [fButton setShowsTouchWhenHighlighted:YES];

    UIImage* tImage = [UIImage imageNamed:@"twitter_med"];
    CGRect tbuttonFrame = CGRectMake(255, 9, 25, 25);
    UIButton* tButton = [UIButton buttonWithType:UIButtonTypeCustom];
    tButton.frame = tbuttonFrame;
    [tButton addTarget:self action:@selector(pushTwitterButton) forControlEvents:UIControlEventTouchUpInside];
    [tButton setBackgroundImage:tImage forState:UIControlStateNormal];
    [tButton setShowsTouchWhenHighlighted:YES];

    UIButton* aButton = [[UIButton buttonWithType:UIButtonTypeInfoLight] retain];
    aButton.frame = CGRectMake(285,9, 25, 25);
    [aButton addTarget:self action:@selector(pushAboutButton) forControlEvents:UIControlEventTouchUpInside];
    [aButton setShowsTouchWhenHighlighted:YES];


    [navBar addSubview:fButton];
    [navBar addSubview:tButton];
    [navBar addSubview:aButton];

    [super viewDidLoad];
}

1 个答案:

答案 0 :(得分:1)

iOS上的网络操作通常是异步的。使用GData API实际获取数据的时间很长,在开始获取fetch的调用之后很久就会发生。

在加载日历事件之​​后需要执行的任何任务都应该在GData提取的回调中完成。一旦提取完成(或失败),将从应用程序的运行循环中调用回调。