Wil*_*ken 14 iphone objective-c ios
我有一堆Lessons,这个班很棒.有一个视图控制器可以使用这些课程.这个控制器需要知道a的上传状态,lesson所以我们有一个带有Lessonas键的NSDictionary 和一个NSNumber具有上传状态的百分比.
这是一个问题,因为在您插入之后,Lesson您希望稍后对其进行查找Lesson(可能在中cellForRowAtIndexPath:)以获得进度.这不起作用,因为密钥是在NSDictionary中复制的.
保存和获取密钥的好方法是这样的:
NSNumber *key = [NSNumber numberWithUnsignedInt:[obj hash]];
[dict setObject:@"... upload progress" forKey:key];
Run Code Online (Sandbox Code Playgroud)
还是有更好的方法?
Chr*_*hey 37
我过去曾经多次使用过这种技术,并且通过将关键对象包装到NSValue中取得了很大的成功:
NSValue *myKey = [NSValue valueWithNonretainedObject:anInstance];
id anItem =[myDict objectForKey:myKey];
Run Code Online (Sandbox Code Playgroud)
(原谅格式化;我在iPhone上.我稍后会格式化:-)
仅仅离开这句话:“这不起作用,因为键是在 NSDictionary 中复制的。” 您是否尝试过在课程中实施-isEqual:并实施?-hash我愿意打赌,如果您用于查找的课程和字典中作为键复制的课程进行-isEqual:比较YES时,您会没事的。
UIView *view = [[UIView alloc] init];
NSMapTable *dict = [NSMapTable weakToStrongObjectsMapTable];
[dict setObject:[NSNumber numberWithInt:1234] forKey:view];
NSNumber *x = [table objectForKey:view];
Run Code Online (Sandbox Code Playgroud)