Доступ к объекту, созданному в другом контроллере представления в любое время - PullRequest
2 голосов
/ 13 марта 2012

У меня проблема с логикой. Мне нужно получить доступ к экземпляру объекта из другого класса.

У меня есть класс с именем FacebookController. В нем есть несколько методов делегата, например fbDidLogin. Сначала метод facebookloginButtonClicked выполняется, когда пользователь нажимает кнопку, и после некоторой внутренней обработки вызывается метод fbDidLogin, и пользователь входит в приложение. (Все это прекрасно работает).

Теперь мне нужно выйти из приложения. Есть метод делегата с именем logout, и я должен вызвать его как [facebook logout].

Я добавил метод с именем -(void) logoutFacebook. Когда пользователь нажимает кнопку выхода из системы, вызывается следующий метод. Метод выхода из системы следующий:

-(void) logoutFacebook {
   [facebook logout];    
}

Выход из системы работает только при выходе из системы (вызов метода logoutFacebook) из того же viewController .

Например, если я нахожусь в классе с именем Student, я пытаюсь вызвать метод logoutFacebook для FacebookController. Мой подход заключается в следующем;

FacebookController *facebookController = [[FacebookController alloc]]init;

[facebookController logoutFacebook];

Это не работает, потому что при этом он создаст новый экземпляр FacebookController. Поэтому мне нужно каким-то образом получить доступ к исходному объекту facebook, который был в FacebookController (который был создан после входа в систему). Как мне получить доступ к этому объекту?

код:

-(void)facebookloginButtonClicked:(id)sender{
 facebook = [[Facebook alloc] initWithAppId:@"3232232" andDelegate:self];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {

        facebook.accessToken  = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    if (![facebook isSessionValid]) {        
        [facebook authorize:nil];      

    }
}
- (void)fbDidLogin {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[ facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[ facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

    }

-(void) logoutFacebook {
       [facebook logout];    
    }

1 Ответ

5 голосов
/ 13 марта 2012

в FacebookController.m классе добавьте этот код над @ реализацией

static FacebookController* Object;

добавьте следующую функцию в файл .h

+ (FacebookController *) sharedInstance

Реализация вышеуказанной функции в.m file

+ (FacebookController *) sharedInstance
{
if( Object == nil)
{
Object = [[FacebookController alloc]]init;
}

return Object;

}

Теперь везде, где вы хотите использовать объект Facebook .. используйте его вот так

[FacebookController sharedInstance];

Теперь у вас будет только один экземпляр класса FacebookController в вашем приложениився жизнь .. Это называется шаблон Singleton .. Вы можете найти его в Google, чтобы получить более подробную информацию о нем.

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