如何从NSMutableDictionary获取对象?

时间:2016-05-04 09:21:32

标签: ios objective-c uitableview nsmutabledictionary

我试图从NSMutableDictionary

获取一些数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{   
    long time = (long)[[tempPosts allKeys] objectAtIndex:section];
    return [[tempPosts objectForKey:[[NSNumber numberWithLong:time] stringValue]] count];
}

但这给了我一个<nil>enter image description here

5 个答案:

答案 0 :(得分:2)

NSDictionaries未排序。 allKeys以随机顺序返回密钥。无法保证两次返回相同的订单,因此这种方法本质上存在缺陷。这一行:

long time = (long)[[tempPosts allKeys] objectAtIndex:section];

绝对是完全错误的。您正在选择字典中的一个键,它是指向对象的指针,最像是NSString *。你把它转换为long - 但是将NSObject的地址转换为long只会给你带来无意义的位。

我建议你描述一下你真正想要的东西。

NSDictionary完全不适合您的数据模型,因为您现在可能已经想到了。获取该字典并将其转换为包含应用程序所需内容的对象。

答案 1 :(得分:0)

转换为long可能是一个错误。 您的密钥可能是NSNumber*NSString*。如果要将其转换为long,则必须获取longValue。 像你一样把它投射到long,不会工作。

答案 2 :(得分:0)

使用以下代码,它适用于我

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

    NSLog(@"tempPosts %@",NSStringFromClass([tempPosts class]));

    return [[[tempPosts objectForKey:[numberArray objectAtIndex:section]] allKeys] count];
}

numberArray是NSMutableArray Value,

我也有同样的问题,然后更改上面的代码,希望它有用

答案 3 :(得分:0)

只需使用它。它将返回字典中元素的数量。

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

return yourDictionary.count;
}
希望它会对你有所帮助。

答案 4 :(得分:0)

使用密钥存储和访问NSMutableDictionary中的对象。

设置NSMutableDictionary

NSMutableDictionary * dictionary = [[NSMutableDictionary alloc]init];

存储在NSMutableDictionary中 e.g。

dictionary[@"someKey"] = @"someString";

按如下方式访问存储的元素NSString

NSString * string  = dictionary[@"someKey"];