如何从 NSMutableDictionary 获取对象?

How to get an object from 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>

转换为 long 可能是一个错误。 您的密钥可能是 NSNumber*NSString*。如果要将其转换为 long,则必须获取 longValue。 像您一样将其转换为 long 是行不通的。

使用下面的代码,它对我有用

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

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

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

numberArray 是 NSMutableArray 的值,

我也遇到了同样的问题,于是修改上面的代码,希望对你有帮助

NSDictionaries 未排序。 allKeys returns 个随机排列的键。无法保证它将 return 相同的顺序两次,因此这种方法存在固有缺陷。这一行:

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

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

我建议您描述您的实际需求。

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

就用这个吧。它将 return 字典中的元素数。

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

return yourDictionary.count;
}

希望对您有所帮助。

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

设置 NSMutableDictionary

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

存储在 NSMutableDictionary 中 例如

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

如下访问存储的元素 NSString

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