我遇到了问题,因为我想把动态数据放在我的sidemenuץ
中我正在使用[MFSideMenu] [1]和Xcode 5 for ios 7.0,我创建了一个SideMenuViewController
:UITableViewController
,我在我的侧边菜单中设计和填充数据。
当我启动应用程序时,它会正确显示所有数据,我从API获取并存储在可变数组中。还可以从应用程序中的本地数据库中存储。
当我与其他用户登录时,未关闭应用程序。我从API收到了正确的数据,numberOfRowsInSection
显示了正确的数量。
但当应用程序到达cellForRowAtIndexPath
时,它会对之前填充可变数组的旧数据起作用,而不是新数据。不知怎的,它被保存了,即使我清空了可变数组,现在SIDEMENU仍然显示旧数据。
我试图重新加载tableview
,但这不起作用。它重新加载tableview但对旧数据起作用。我让它再次调用viewdidload
,但这并没有改变任何东西。使应用程序显示正确数据的唯一因素是,如果我重新启动应用程序。
- (id)init {
if (self = [super init]) {
self.callToServerEngine = [CallToServerEngine new];
[self getMyData];
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.callToServerEngine = [CallToServerEngine new];
[DataBaseEngine new];
self.tableView.delegate = self;
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
self.allMyData = [NSMutableArray new];
[self.allMyData removeAllObjects];
}
所以我的问题是什么可能是错的,是否可以在sidemenu中使用动态数据,如果是这样,最好的方法是什么?
编辑获取数据
-(void)getMyData{
[self.callToServerEngine getAllMyData postNotificationName:GetAllMyDataForSideMenuVC];
SideMenuViewController *weakself = self;
__block id refreshSuccess;
refreshSuccess = [[NSNotificationCenter defaultCenter] addObserverForName:GetAllMyDataForSideMenuVC
object:nil queue:nil usingBlock:^(NSNotification *note) {
weakself.allMyData = [NSMutableArray new];
[weakself.allData removeAllObjects];
weakself.allMyData = [note.userInfo objectForKey:@"data"];
dispatch_async(dispatch_get_main_queue(), ^{
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 4)];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationNone];
});
[[NSNotificationCenter defaultCenter] removeObserver:refreshSuccess];
refreshSuccess = nil;
}];
的appDelegate
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:[NSBundle mainBundle]];
MFSideMenuContainerViewController *container = (MFSideMenuContainerViewController *)self.window.rootViewController;
//container.menuContainerView.translates
UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"NavigationController"];
UITableViewController *leftSideMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainMenuVC"];
[container setLeftMenuViewController:leftSideMenuViewController];
[container setCenterViewController:navigationController];
container.panMode= MFSideMenuPanModeCenterViewController | MFSideMenuPanModeSideMenu;
//container.panMode = MFSideMenuPanModeCenterViewController;
self.window.rootViewController = container;
[self.window makeKeyAndVisible];
答案 0 :(得分:0)
根据我对问题的评论发布可能的解决方案。尝试在主线程上重新加载UITableView。 UI更新应始终在主线程上完成,否则会导致一系列可解释的问题。
dispatch_async(dispatch_get_main_queue(), ^{
[tableview reloadData];
});
或者您也可以重新加载显示数据的UITableView部分,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{
NSIndexSet *section = [NSIndexSet indexSetWithIndex:0];
[self.tableView reloadSections:section withRowAnimation:UITableViewRowAnimationNone];
});
答案 1 :(得分:0)
动态值仅在我重新启动应用程序时更新,这意味着该类首次初始化时工作正常。所以这就是为什么每当我按下侧面菜单滑动菜单时我都会再次打电话给同一个班级。
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@" Main_iPhone"捆绑:[NSBundle mainBundle]]; self.menuContainerViewController.leftMenuViewController = [storyboard instantiateViewControllerWithIdentifier:@" MainMenuVC"];
这对我有用,也许不是最好的解决方案,但它解决了我的问题。