Nano Hash - криптовалюты, майнинг, программирование

Как передать информацию из loginViewFetchedUserInfo: сразу в несколько представлений

Привет, я пытаюсь передать user.id и user.name из loginViewFetchedUserInfo: в мой menuViewController, profileViewController и settingsViewController, пока я отправил информацию в profileViewController с помощью:

// this method will be called when the user information has been fetched
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user
{
//    self.profilePictureView.profileID = user.id;
//self.FBProfilePicture.profileID = user.id;

_profilePicture = user;
_FBNameString = user.name;

NSLog(@"%@, name from Login", _FBNameString);


[self pushViewController:user.name andProfilePicture:_profilePicture];
}


- (void)pushViewController:(NSString *)userName andProfilePicture:(id<FBGraphUser>)profilePicture
{

//    MenuViewController *menu = [self.storyboard instantiateViewControllerWithIdentifier:@"MenuViewController"];
//    [menu setFBName:userName];
//    [menu setFBProfilePic:profilePicture];
//
//    SettingViewController *setting = [self.storyboard instantiateViewControllerWithIdentifier:@"SettingViewController"];
//    [setting setFBName:userName];
//    [setting setFBProfilePic:profilePicture];

//    NSLog(@"%@",profilePicture);


//    [self.navigationController pushViewController:controller animated:NO];



}

и я могу получать информацию только в profileViewController, а не в другом, у меня есть сеттеры и геттеры, я использую протоколы, но я не могу передать ее другому viewController

17.07.2014

Ответы:


1

В общем, ваш метод должен быть таким (вам может потребоваться настроить в соответствии с требованиями)

// this method will be called when the user information has been fetched
-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user{

//    self.profilePictureView.profileID = user.id;
//self.FBProfilePicture.profileID = user.id;

_profilePicture = user.picture;//assuming you may be having picture property for object user
_FBNameString = user.name;

NSLog(@"%@, name from Login", _FBNameString);

//POST NOTIFICATION with desire object here its "user"
[[NSNotificationCenter defaultCenter] postNotificationName:@"POSTLOGININFO" object:user];

//uncomment if you want this, ...depends on you 
//[self pushViewController:user.name andProfilePicture:_profilePicture];

}

Теперь обновите метод инициализации вашего класса menuViewController.m, profileViewController.m и settingsViewController.m, как показано ниже.

-(id) init
{
  self = [super init];
  if (!self) 
   return nil;

  //Your custom code 

 //get registered for POSTLOGININFO notification so that selector method get called when you post notification with name POSTLOGININFO
  [[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(gotLoginInfo:) 
          name:@"POSTLOGININFO"
              object:nil];
   return self;
}

Добавьте новый метод gotLoginInfo: в каждый из ваших menuViewController.m, profileViewController.m и settingsViewController.m.

-(void)gotLoginInfo:(NSNotification *)notification{

    //Assuming FBGraphUser class have all required properties
    FBGraphUser *user = (FBGraphUser *)[notification object];

   // save user.id and user.name to your class local variable
    NSLog(@"UserID::%@ and username::%@",user.id,user.name);

}

 -(void)dealloc{

      [[NSNotificationCenter defaultCenter] removeObserver:self name:@"POSTLOGININFO" object:nil];


 }

удалите наблюдателя уведомлений, как только вы закончите, используя "[[NSNotificationCenter defaultCenter] removeObserver: self name: @"POSTLOGININFO" object:nil];". Также убедитесь, что у вас есть действительные объекты вашего класса menuViewController, profileViewController и settingViewController перед вызовом loginViewFetchedUserInfo:

17.07.2014
  • Можете ли вы показать пример пользовательского класса, который будет реализован с этим, чтобы я мог это сделать, также я вызвал loginViewFetchUserInfo из моего LoginViewController после того, как пользователь вошел в систему, так как бы я передал эту информацию, и я думал, нормально иметь класс Facebook для использования и передачи информации из 18.07.2014
  • Извините, что класс пользователя является опечаткой, я исправил это, во-вторых, вы можете передать любой объект через уведомление, решение за вами. 18.07.2014
  • вы говорите удалить NSNotificationCenter, но каким методом я могу это сделать в методе инициализации или.. 19.07.2014
  • он продолжает говорить о необъявленном классе FBGraphUser, но я импортировал FB SDK 19.07.2014
  • Поскольку мы добавляем уведомление в init, нам нужно удалить уведомление в методе Dealloc. 19.07.2014

  • 2

    Вы можете использовать NSNotification. Пример Существует метод с именем myTestNotificationReceived, который реализован в myClassA. Теперь я хочу вызвать этот метод из другого класса myClassB. Ниже приведен код, как я могу это сделать с помощью NSNotificationCenter.

        @implementation myClassA
    - (void) dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
    }
    - (id) init
    {
    self = [super init];
    if (!self) return nil;
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(myTestNotificationReceived:) 
        name:@"myTestNotification"
        object:nil];
    return self;
    }
    - (void) myTestNotificationReceived:(NSNotification *) notification
    {
    if ([[notification name] isEqualToString:@"myTestNotification"])
        NSLog (@"Notification is successfully received!");
    }
    @end
    

    Теперь я хочу вызвать метод myTestNotification из myClassB.

    @implementation myClassB
    - (void) dealloc{
    [super dealloc];
    }
    - (id) init
    {
        self = [super init];
        if (!self) return nil;
        return self;
    }
    - (void) myMethod
    {
    // All instances of myClassA will be notified
    [[NSNotificationCenter defaultCenter] 
        postNotificationName:@"myTestNotification" 
        object:self];
    }
    @end
    

    Теперь вы можете добавить столько наблюдателей в разные классы.

    17.07.2014
  • я только что попробовал ваш пример здесь, просто чтобы посмотреть, и ничего не происходит, есть ли лучший и более подробный пример или учебник, который вы могли бы показать мне о том, как передавать информацию facebook в несколько просмотров одновременно 19.07.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..