我有一堆Lesson,该类效果很好。有一个适用于这些类(class)的 View Controller 。该 Controller 需要知道lesson的上传状态,因此我们有一个NSDictionary,其中Lesson为键,而NSNumber具有上传状态百分比。

这是一个问题,因为在您插入Lesson之后,您想稍后在同一个Lesson(也许在cellForRowAtIndexPath:中)上进行查找以获取进度。这是行不通的,因为 key 是在NSDictionary中复制的。

用这样的方式保存和获取 key 是否是一种很好的形式:

NSNumber *key = [NSNumber numberWithUnsignedInt:[obj hash]];
[dict setObject:@"... upload progress" forKey:key];

还是有更好的方法?

最佳答案

过去,我已经多次使用这种技术,并且通过将键对象包装到NSValue中获得了巨大的成功:

NSValue *myKey = [NSValue valueWithNonretainedObject:anInstance];
id anItem =[myDict objectForKey:myKey];

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsvalue_Class/Reference/Reference.html#//apple_ref/occ/clm/NSValue/valueWithNonretainedObject:

(请原谅格式;我在iPhone上。稍后再进行格式化:-)

关于iphone - 使用对象作为NSDictionary的键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11532306/

10-11 19:53