Closed PhamPhiPhuc closed 9 years ago
I'm learning to use ReactiveViewModel by following some examples:
but when I used didBecomeActiveSignal, code in subscribeNext not called
Here is my code:
MuseumsListViewModel.m
#import "MuseumsListViewModel.h" #import "Museum.h" #import "MuseumItemViewModel.h" #import "JSONServices.h" #import "Constants.h" #import <ReactiveCocoa/ReactiveCocoa.h> #import <LinqToObjectiveC/NSArray+LinqExtensions.h> @implementation MuseumsListViewModel - (instancetype)init { self = [super init]; if (self) { @weakify(self) [self.didBecomeActiveSignal subscribeNext:^(id x) { NSLog(@"didBecomeActiveSignal"); @strongify(self); [self getMuseumsSignal]; }]; } return self; } - (RACSignal *)getMuseumsSignal { return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [JSONServices loadJSONFromURL:MUSEUMS_LIST_URL parseToClass:[MuseumsList class] completion:^(id object) { MuseumsList *museumsList = (MuseumsList *)object; if (self.museums == nil) { self.museums = [[NSMutableArray alloc] init]; } [self.museums addObjectsFromArray:[museumsList.data linq_select:^id(Museum *museum) { return [[MuseumItemViewModel alloc] initWithMuseum:museum]; }]]; self.meta = museumsList.meta; } failure:^(NSError *error) { NSLog(@"Error: %@", error); }]; return nil; }]; } @end
MuseumsListViewController.m
#import "MuseumsListViewController.h" @interface MuseumsListViewController () @end @implementation MuseumsListViewController - (instancetype)initWithViewModel:(MuseumsListViewModel *)viewModel { self = [super init]; if (self ) { self.viewModel = viewModel; } return self; } - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end
AppDelegate.m
#import "AppDelegate.h" #import "MuseumsListViewModel.h" #import "MuseumsListViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; MuseumsListViewModel *museumsListViewModel = [[MuseumsListViewModel alloc] init]; MuseumsListViewController *museumsListViewController = [[MuseumsListViewController alloc] initWithViewModel:museumsListViewModel]; self.window.rootViewController = museumsListViewController; [self.window makeKeyAndVisible]; return YES; } @end
Did I miss something? Or I did something wrong? Can you help me? Thank you.
You need to set the view model's active property to YES.
active
YES
Thank you very much, I missed it. It's working now.
I'm learning to use ReactiveViewModel by following some examples:
but when I used didBecomeActiveSignal, code in subscribeNext not called
Here is my code:
MuseumsListViewModel.m
MuseumsListViewController.m
AppDelegate.m
Did I miss something? Or I did something wrong? Can you help me? Thank you.