Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用动态数据的MF侧菜单问题_Ios_Ios7_Xcode5 - Fatal编程技术网

Ios 使用动态数据的MF侧菜单问题

Ios 使用动态数据的MF侧菜单问题,ios,ios7,xcode5,Ios,Ios7,Xcode5,我有一个问题,因为我想把动态数据放在我的侧菜单ץ中 我在ios 7.0的Xcode 5中使用[MFSideMenu][1],并创建了SideMenuViewController:UITableViewController,在这里我在侧菜单中设计和填充数据 当我启动应用程序时,它会正确地显示所有数据,这些数据是我从一个API获取并存储在一个可变数组中的,也是从应用程序中的一个本地数据库获取的 当我与其他用户登录时,不关闭应用程序。我从API收到了正确的数据,NumberOfRowsin部分显示了正

我有一个问题,因为我想把动态数据放在我的侧菜单ץ中

我在ios 7.0的Xcode 5中使用[MFSideMenu][1],并创建了SideMenuViewController:UITableViewController,在这里我在侧菜单中设计和填充数据

当我启动应用程序时,它会正确地显示所有数据,这些数据是我从一个API获取并存储在一个可变数组中的,也是从应用程序中的一个本地数据库获取的

当我与其他用户登录时,不关闭应用程序。我从API收到了正确的数据,NumberOfRowsin部分显示了正确的数量

但是,当应用程序进入CellForRowatineXpath时,它会对以前填充可变数组的旧数据起作用,而不是新数据。尽管我清空了可变数组,但它还是保存了下来,现在侧菜单仍然显示了旧数据

我尝试重新加载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];
}
那么我的问题是什么可能是错误的,是否有可能在侧菜单中使用动态数据,如果有,实现这一点的最佳方法是什么

编辑以获取数据

-(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];

发布一个可能的解决方案,并附上我对该问题的评论。尝试在主线程上重新加载UITableView。UI更新应该始终在主线程上完成,否则会导致大量可解释的问题

或者也可以重新加载UITableView部分,该部分显示如下数据:


动态值只有在我重新启动应用程序时才会更新,这意味着当类首次初始化时,它才能工作。因此,每当我按下侧菜单滑动菜单时,我都会再次调用同一个类

UIStoryboard*情节提要=[UIStoryboard情节提要,名称:@Main_iPhone bundle:[NSBundle mainBundle]]; self.menuContainerViewController.leftMenuViewController=[storyboard InstanceEviewController的标识符:@MainMenuVC]


这对我来说很有效,也许不是最好的解决方案,但它解决了我的问题。

Sry作为一个noob,你说的主线程是什么意思,比如我应该在viewDidLoad中调用此方法,还是在我获得数据后调用此方法?不用担心,你应该在获得数据后调用此方法。尝试替换[weakself.tableView reloadData];带有dispatch_asynchdispatch_get_main_队列的代码,^{[weakself.tableView reloadData];};第一个似乎没有做到这一点,第二个,我一共有4个部分。我是否应该循环遍历它们并调用self.tableView重载部分四次?奇怪。我想那会管用的。对于第二部分,您不需要将这些部分循环四次。只需使用节索引NSIndexSet*sections=[NSIndexSet indexsetwithindexensinrange:nsmakerange 0,3]创建一个这样的索引集;将此传递给reloadSections:问题仍然存在,它返回到getData函数和您发布的reloadTableview。它以正确的数量到达numberofRows,但当到达单元格时,它会与同一数组中的旧数据进行对话。我在侧菜单中有另一个数据,它来自我的本地数据库。当这些值发生更改时,与api中的值相比,它不会显示任何内容。这就好像它无法与旧数据相关联。
dispatch_async(dispatch_get_main_queue(), ^{
                    [tableview reloadData];
        });
dispatch_async(dispatch_get_main_queue(), ^{
        NSIndexSet *section = [NSIndexSet indexSetWithIndex:0];
        [self.tableView reloadSections:section withRowAnimation:UITableViewRowAnimationNone];
    });