正在调用方法但尚未执行

时间:2011-08-11 02:28:29

标签: objective-c ios cocoa-touch ios4

所以我的应用程序中的Twitter / Facebook实现是一种学习体验,但我几乎就在那里,我有一个最后的,可能是简单的问题。使用MGTwitter引擎,我在

中从我的viewcontroller调用一个方法
 - (void) setAccessToken: (OAServiceTicket *) ticket withData: (NSData *) data {

该方法正在启动,(由NSLog调用确认)。然而,它没有做它应该做的事情,这在我的Twitter注销按钮中淡出。我仍然围绕着Objective-C处理方法的方式,我觉得我只是没有将变量指向正确的位置。非常感谢任何方向,以下是代码:

SA_OAuthTwitterEngine.m -

//
// access token callback
// when twitter sends us an access token this callback will fire
// we store it in our ivar as well as writing it to the keychain
// 
- (void) setAccessToken: (OAServiceTicket *) ticket withData: (NSData *) data {
    if (!ticket.didSucceed || !data) return;

    NSString *dataString = [[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding] autorelease];
    if (!dataString) return;

    if (self.pin.length && [dataString rangeOfString: @"oauth_verifier"].location == NSNotFound) dataString = [dataString stringByAppendingFormat: @"&oauth_verifier=%@", self.pin];

    NSString                *username = [self extractUsernameFromHTTPBody:dataString];

    if (username.length > 0) {
        [self setUsername: username password: nil];
        if ([_delegate respondsToSelector: @selector(storeCachedTwitterOAuthData:forUsername:)]) [(id) _delegate storeCachedTwitterOAuthData: dataString forUsername: username];
    }

    [_accessToken release];
    _accessToken = [[OAToken alloc] initWithHTTPResponseBody:dataString];
    //Call twit login from my view controller
    MyView *fvController = [[MyView alloc] init];
    [MyView twitLogin];
    [MyView helper];
    NSLog(@"LETS TWEET DIRECTLY AFTER SUCCESSFUL LOG IN!");

}

这是我的帮助方法在我的.m文件中执行的操作:

-(void)helper{
    NSLog(@"HELPER FUNCTION");
    [self fadeIn:twitterLogout withDuration:2 andWait:2.0];
}

这是它正在调用的方法

//FADE IN FUNCTION ------------------------------//////////////////////

-(void)fadeIn:(UIView*)viewToFadeIn withDuration:(NSTimeInterval)duration 
      andWait:(NSTimeInterval)wait
{
    [UIView beginAnimations: @"Fade In" context:nil];
    [UIView setAnimationDelay:wait];
    [UIView setAnimationDuration:duration];
    viewToFadeIn.alpha = 1;
    [UIView commitAnimations];

}

2 个答案:

答案 0 :(得分:1)

*是否打印了日志声明?

*是setAccessToken:withData:是从主线程调用的吗?尝试从主线程调用fadeIn方法,例如这样的

- (void) helper{
    NSLog(@"HELPER FUNCTION");
    [self performSelectorOnMainThread:@selector(callFadeIn)];
}    
-(void)callFadeIn{
    [self fadeIn:twitterLogout withDuration:2 andWait:2.0];
}

看看是否有帮助。有可能从另一个线程调用setAccessToken :(以及helper和fadeIn)。所有UI操作都应该从主线程发生。

答案 1 :(得分:1)

在Objective-C中,方法以两种方式之一声明:

- (returnType)methodName;

+ (returnType) methodName;

第一种类型是“实例”方法,第二种类型是“类”方法。

这些行应该改变:

[MyView twitLogin];
[MyView helper]; 

请改为尝试:

[fvController twitLogin];
[fvController helper];

此外,在委托返回值之前,您可能正在调用辅助方法。你应该看看MGTwitterEngine是否包含一个委托。 (如果没有,我会感到惊讶。)只有在登录完成后才应使用可用的回调来调用方法。简单地按顺序调用方法将无法满足您的需求。