2 TableViewController上的空行与来自另一个viewcontroller中的一个Viewcontroller的数据

时间:2014-08-30 05:09:58

标签: ios objective-c iphone uitableview

我的项目中有2 UITableViewController个 我遇到的问题是我在输入数据的tableView的{​​{1}}处获得了空白单元格条目。

我似乎无法弄清楚为什么会这样。
即使信息来自另一个tableView,它也会在此tableView中创建空白行。

以下是2 UITableViewController s之一的主要tableView部分:

UITableViewController

来自其他- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSLog(@"number of addedSpaceObjects %lu",(unsigned long)[self.diaryoptions count]); // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSLog(@"number of sections %ld",(long)section); // Return the number of rows in the section. return [self.diaryoptions count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentification = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentification forIndexPath:indexPath]; Data2 *diary = [self.diaryoptions objectAtIndex:indexPath.row]; cell.textLabel.text = diary.diaryname; cell.detailTextLabel.text = diary.diaryWeight; return cell; }

UITableViewController

这是GitHub上的完整项目。 https://github.com/josher32/Plant-Diet

感谢任何人提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

好的,所以我检查了应用程序,我会尽力解释问题,尽可能准确地解释它。

首先,有问题的课程是:

  1. RecipesTableTableViewController
    • AddRecipeViewController
    • Data
  2. DiaryTableViewController
    • AddDiaryViewController
    • Data2
  3. 其次,我们需要查看您的

    #define ADDED_SPACE_OBJECTS2 @"Added Space Objects Array"
    

    AddRecipeViewController

    所以...... AddRecipeViewController基本上创建了一个Data对象,该对象保存在一个数组中,最终存储在NSUserDefaults下的密钥名Added Space Objects Array下。

    大!!所以你现在在一些Data对象中有了与配方相关的东西。


    AddDiaryViewController

    这里也是一样。
    AddDiaryViewController创建一个Data2对象,该对象最终存储在相同键名NSUserDefaults下的Added Space Objects Array中。 但是在存储之前,您将获取键Added Space Objects Array的旧值,这是一个数组,并在将其放回{{1 }}

    但是现在......这个数组现在有NSUserDefaults个和Data个对象的组合!

    Data2

    当我们来到这里时,事情变得真实。

    RecipesTableTableViewController

    由于我们已经意识到- (void)viewDidLoad { //... NSArray *myRecipeAsPropertyLists = [[NSUserDefaults standardUserDefaults] arrayForKey:ADDED_SPACE_OBJECTS_KEY]; for (NSDictionary *dictionary in myRecipeAsPropertyLists) { Data *spaceObject = [self spaceObjectForDictionary:dictionary]; [self.addedSpaceObjects addObject:spaceObject]; } } 可以包含self.addedSpaceObjects以及Data个对象,因此当Data2包含特定于dictionary类型的内容时,Data2将无法将其正确翻译为所需的spaceObjectForDictionary对象。

    我们期待Datanametitleingredients,但我们正在directionsdiaryentry diaryname

    所以(在这种情况下):

    1. diaryWeightnametitleingredients的值为directions
    2. 部分行计数不正确,因为它会计算nil个和Data个对象(并且我们不关心Data2个对象Data2班级...... 对吗?......不管怎样,我认为

    3. RecipesTableTableViewController

      对于某些- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //... if (indexPath.section == 1) { Data *recipe = [self.addedSpaceObjects objectAtIndex:indexPath.row]; cell.textLabel.text = recipe.name; } //... } ,我们看到recipe.namenil,而indexPath则为空白行,反之亦然。


      解决方案:

      首先,我不建议DiaryTableViewController用于您的目的,但无论如何......

      基本上,为您的NSUserDefaults内容使用一个@"Added Space Objects Array"密钥。

      我建议您使用2个单独的密钥。

      NSUserDefaults

      基本上,将条目分开,而不是将它们混合在一个密钥名称下 这似乎是在不改变逻辑的情况下解决问题的最快方法。