【问题标题】:Methods are being called yet not executing方法被调用但未执行
【发布时间】:2011-08-11 02:28:29
【问题描述】:

所以我在我的应用程序中实现 Twitter/Facebook 是一种学习体验,但我快到了,我还有最后一个可能很简单的问题。使用 MGTwitter 引擎,我在

中从我的视图控制器调用一个方法
 - (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];

}

【问题讨论】:

    标签: objective-c ios cocoa-touch ios4


    【解决方案1】:

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

    - (returnType)methodName;
    

    + (returnType) methodName;
    

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

    这些行应该改变:

    [MyView twitLogin];
    [MyView helper]; 
    

    试试这个:

    [fvController twitLogin];
    [fvController helper];
    

    此外,您可能会在委托返回值之前调用您的辅助方法。您应该查看 MGTwitterEngine 是否包含委托。 (如果没有,我会感到惊讶。)您应该仅在登录完成时使用可用的回调来调用方法。简单地按顺序调用方法不会做你想做的事。

    【讨论】:

    • 非常感谢您前几天的帮助,是的,我更正了我的方法调用,在深入研究 API 并搜索更多教程后,我发现了如何调用 MGTwitter 的登录成功委托,一切正常工作完美。 :) 再次感谢!
    【解决方案2】:

    *是否都打印了日志语句?

    *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 操作都应在主线程中进行。

    【讨论】:

    • 感谢您的帮助,这更正了我收到的其他一些警告,感谢您的宝贵时间:)
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2021-12-17
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2021-03-21
    • 2020-02-25
    相关资源
    最近更新 更多