在Obj-C中通过索引访问字典中的字典

时间:2013-05-06 13:50:23

标签: objective-c filter indexing nsdictionary tableview

我目前正在尝试学习Objective-C而且我遇到了一个小问题。 我想构建一个iPad应用程序,用于收集用户按日期和时间输入的简单数字。 为此,我想到了这个结构:

  • 词典( “主”)
    • 字典(“27012013”​​)//这包含2013年1月27日的所有数据
      • 指数= 0
      • 3:33 pm = 123 //这意味着下午3:33的值为123
      • ..要遵循的其他值
    • 字典(“28012013”​​)//等等

所以基本上有一个名为“main”的大词典,它包含所有日子的词典,然后保存其索引和所有记录的值。

我通过UIAlertView输入获取值,然后调用

(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

委托方法,然后将当前时间和日期保存在NSString中,如下所示:

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateStyle:NSDateFormatterNoStyle];
[format setTimeStyle:NSDateFormatterShortStyle];
NSString *time = [format stringFromDate:[NSDate date]];
NSLog(@"Time: %@ and entered Text:%@",time,returnvalue.text);
 //Which Date do we have
[format setDateStyle:NSDateFormatterShortStyle];
[format setTimeStyle:NSDateFormatterNoStyle];
NSString *date = [format stringFromDate:NSDate.date];
NSLog(@"Found Date:%@",date);
NSString *identifier = 
  [[date componentsSeparatedByCharactersInSet:
                 [NSCharacterSet punctuationCharacterSet]] componentsJoinedByString:@""];
NSLog(@"Identifier:%@",identifier);

其中returnvalue.text保存输入的文本。然后我检查名为NSString标识符的字典是否已经存在,如果没有,则将其添加到main:

        if([main objectForKey:identifier] == nil){
        //No Dict Available for current Date so create one:
        //there should be no more than 30 Entries per Day
        NSMutableDictionary *d = [[NSMutableDictionary alloc] initWithCapacity:30];
        [d setObject:identifier forKey:@"Name"];
        NSNumber* tmpi = [NSNumber numberWithInteger:main.count];
        [d setObject:tmpi forKey:@"Index"];
        //and store the recieved value in it
        [d setObject:returnvalue.text forKey:time];
        [main setObject:d forKey:identifier];
    }
    else{
        NSMutableDictionary *d = [main objectForKey:identifier];
        [d setObject:returnvalue.text forKey:time]; 
    }

这里的第一个问题是:我是否必须使用main.count或main.count + 1?

此外,我想在tableView中显示它们的信息,其中每一天都应该有自己的部分。对于方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

因此,我需要通过索引或者例如在主词典中解决它们的词典。通过它们的Index键过滤它们以返回它们内部的值的数量。 我现在可以使用一个巨大的NSArray作为main,但这将使得确定当天的字典是否已经存在更复杂并且宁愿不想这样做的方法。 那么有人可以帮助我吗?

先谢谢

1 个答案:

答案 0 :(得分:0)

第一个答案: 它取决于你,但“main.count”将返回字典中的对象数量可能是零。因此,如果你想从零开始,那么除了+1之外它是好的。

第二个答案: 这里是NSDictionary“allKeys”的函数,它将所有键都返回为“NSArray”,然后你可以通过索引获取每个键,如果你不知道“key”只是使用数组索引得到它。