Методы вызываются, но не выполняются - PullRequest
1 голос
/ 11 августа 2011

Итак, моя реализация 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 ]

1 голос
/ 12 августа 2011

В Objective-C методы объявляются одним из двух способов:

- (returnType)methodName;

или

+ (returnType) methodName;

Первый тип является методом «экземпляра», а второй тип -метод "class".

Эти строки должны быть изменены:

[MyView twitLogin];
[MyView helper]; 

Попробуйте вместо этого:

[fvController twitLogin];
[fvController helper];

Кроме того, вы можете вызывать свой вспомогательный метод доделегат возвращает значение.Вы должны увидеть, содержит ли MGTwitterEngine делегат.(Я бы удивился, если бы этого не произошло.) Вы должны использовать доступные обратные вызовы для вызова методов только после завершения входа в систему.Простой вызов методов по порядку не будет делать то, что вы хотите.

1 голос
/ 12 августа 2011

* Распечатаны ли оба оператора?

* Является ли 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) вызывается из другого потока.Все операции пользовательского интерфейса должны происходить из основного потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...