だから私はUIViewController
を使用して非同期でデータをロードするを持っていますNSOperationQueue
。シードデータを使用していた当初はコメント欄を持っていましたが、現在は実際のサービスに切り替えています。データはこのメソッドに適切に到達しますが、UIは更新されていません。次に、メインスレッドでUI更新を実行する必要があることを確認したので、次のコードに変更しました。
- (void)viewDidLoad
{
[super viewDidLoad];
self.menuView = (MenuView*)self.view;
[MenuUIModel loadAndOnSuccess:^(id data, id context) {
[self.menuView performSelectorOnMainThread:@selector(bindToModel:) withObject:data waitUntilDone:YES];
//[self.menuView bindToModel:(MenuUIModel*)data];
} onFail:^(NSString *error, id context) {
NSLog(@"FAIL with error: %@", error);
}];
}
MenuView
少しトリミングされていますが、これがです。
@interface MenuView : UITableView
@property (strong, nonatomic) NSArray *menuItemViews;
// Menu Item View Loading Outlet
@property (strong, nonatomic) IBOutlet MenuItemView *lastLoadedMenuItemView;
- (void) bindToModel:(MenuUIModel*)model;
@end
@implementation MenuView
- (void)bindToModel:(MenuUIModel*)model
{
if (model) {
NSMutableArray *mutableMenuItemViews = [NSMutableArray array];
UINib* inMemoryNib = [UINib nibWithNibName:@"MenuItemView" bundle:nil];
for (MenuItemUIModel *item in model.Items) {
[inMemoryNib instantiateWithOwner:self options:nil];
[self.lastLoadedMenuItemView bindToModel:item];
[mutableMenuItemViews addObject:self.lastLoadedMenuItemView];
index++;
}
self.menuItemViews = [[NSArray alloc] initWithArray:mutableMenuItemViews];
}
}
@end
このペン先をロードする方法は少し異なりますが、目的は、ペン先とそのリソースをメモリに1回だけロードし、必要に応じてインスタンス化することです。また、シードコードでもうまく機能します。
したがって、メインスレッドでこのメソッドを実行すると機能すると思いましたが、明らかに機能しません。別の注意点として、にテストを追加しましたが、このメソッドでテストUILabel
するMenuView
と完全に更新されました。では、内部でbindToModelを呼び出すとMenuView
、メインスレッドなどで実行されなくなりますか?