【问题标题】:iphone - Create NSMutableDictionary filled with NSMutableArrays dynamicallyiphone - 动态创建充满 NSMutableArrays 的 NSMutableDictionary
【发布时间】:2012-06-13 10:44:05
【问题描述】:

我有一个对象数组。每个对象都有属性“日期”和“标题”。 我想用以下项目填充分段UITableView

Section 1 - 2012.06.12 (taken from object.date)
  Cell 1.1: Title 1 (taken from object.name)
  Cell 1.2: Title 2
  Cell 1.3: Title 3
  ...
Section 2 - 2012.06.13
  Cell 2.1: Title 1
  Cell 2.2: Title 2
  ..
Section 3 ..

我可以通过为所有 date 组合手动创建 1..n NSMutableArrays 并用 object.name 值填充它们来做到这一点。但问题是我不知道有多少date组合,所以应该动态完成。此外,date 属性可以在不同的对象中重复 我的对象结构是:

Object
 -NSDate - date
 -NSString - title

UPD

我在想是否可以创建 NSDictionary,其中键是我的日期,对象是 NSArray,其中包含我的所有关键日期项目。但我不知道如何动态地做到这一点。

我希望我已经足够清楚地解释了我的问题。 提前谢谢!

【问题讨论】:

  • 你的每个对象包含 3 个标题?你能展示你的对象结构吗?
  • 你从哪里获取日期?
  • 我已经更新了我的问题。每个对象只有一个标题。示例中的标题取自不同的对象

标签: iphone objective-c ios xcode cocoa-touch


【解决方案1】:

您可以根据日期创建数组。您有对象数组,因此遍历该对象数组以获得不同的日期,如下所示:

for(int i =0;i<[objectsArr count];i++)
{
   if(![newDateArr containsObject:[objectsArr objectAtIndex:i].date])
   {
      [newDateArr addObject:[objectsArr objectAtIndex:i].date];
   }
   NSMutableArray *newTitleArray = [newTitleDictionary objectForKey:@"[objectsArr objectAtIndex:i].date"];
   if(newTitleArray != nil)
   {
      [newTitleArray addObject:[objectsArr objectAtIndex:i].title];
   }
   else
   {
      newTitleArray = [[[NSMutableArray alloc] init] autorelease];
      [newTitleArray addObject:[objectsArr objectAtIndex:i].title];
   }
   [newTitleDictionary setValue:newTitleArray forKey:@"[objectsArr objectAtIndex:i].date"];
}

newTitleDictionary 和 newDateArr 在此方法之外声明。现在您可以同时使用 newTitleDictionary 和 newDateArr 来填充 tableview。

【讨论】:

  • 好主意!我以同样的方式做到了,它有效!谢谢!
【解决方案2】:

如果我理解正确,您想将一个对象放入一个数组中,然后使用该数组填充一个表格视图?

每次只需将日期对象添加到 NSMutableArray。

[myArray addObject:dateObject];

然后是填充表格视图..

DateObject *newDateObj = [myArray objectAtIndex:index];

我希望这会有所帮助,我理解你的问题

编辑现在回答我有点明白了。

第 1 步 检查现有的日期数组,看看是否有任何匹配的可能通过使用 for 循环遍历它。在线搜索如何比较 NSDate。

第 2 步如果它与任何匹配,则将其作为数组插入到数组中,仅包含该日期,因此数组计数将为 1。如果它确实匹配,则将其与该数组一起插入到数组中,使数组计数为 2 或更多。

第 3 步在声明表的部分数量时,只需返回 dateHolderArray 计数即可。

第 4 步在声明每个部分的行数时,返回 dateHolderArray 中的数组的数组计数。

第 5 步 在向单元格填充信息时显示内容。它只是使用节 id 和行 id 从数组中获取日期的任务。

我会这样做,可能还有很多其他方法。有什么问题就问吧

【讨论】:

  • 我不能那样做,因为可能会有重复的日期
  • 所以您想检查一个日期是否与数组中的另一个日期相同,如果是,可以将其添加到一个新数组中,以便将它们分组在一个日期下?
  • 检查我的答案,了解我将如何做你想做的事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多