我的项目中有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
感谢任何人提供的任何帮助!
答案 0 :(得分:0)
好的,所以我检查了应用程序,我会尽力解释问题,尽可能准确地解释它。
首先,有问题的课程是:
RecipesTableTableViewController
AddRecipeViewController
Data
DiaryTableViewController
AddDiaryViewController
Data2
其次,我们需要查看您的
#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
对象。
我们期待Data
,name
,title
,ingredients
,但我们正在directions
,diaryentry
diaryname
。
所以(在这种情况下):
diaryWeight
,name
,title
,ingredients
的值为directions
nil
个和Data
个对象(并且我们不关心Data2
个对象Data2
班级...... 对吗?......不管怎样,我认为)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.name
为nil
,而indexPath
则为空白行,反之亦然。
首先,我不建议DiaryTableViewController
用于您的目的,但无论如何......
基本上,不为您的NSUserDefaults
内容使用一个@"Added Space Objects Array"
密钥。
我建议您使用2个单独的密钥。
NSUserDefaults
基本上,将条目分开,而不是将它们混合在一个密钥名称下 这似乎是在不改变逻辑的情况下解决问题的最快方法。