我正在为Quartz Composer编写自定义补丁,我使用结构作为输入。结构是Obj-C中的NSDictionary,所以我使用NSDictionary的方法来处理这些结构。根据我构建这些结构的方式,key可以是NSString类型或NSNumber。
通常QC不给出命名结构,键是“0”......“n”或0 ... n所以我决定在NSDictionary类别中添加-objectAtIndex:
的NSDictionary + Utils.h
#import <Foundation/Foundation.h>
@interface NSDictionary (Utils)
- (id)objectAtIndex:(NSInteger)index;
@end
的NSDictionary + Utils.m
#import "NSDictionary+Utils.h"
@implementation NSDictionary (Utils)
- (id)objectAtIndex:(NSInteger)index
{
NSString* key = [NSString stringWithFormat:@"%d", index];
return [self objectForKey:key];
}
@end
它非常适用于我使用Kineme Struc Maker补丁构建结构的项目之一。 在另一个项目中,我使用了apple提供的Queue补丁。键不是NSString类型,而是NSNumber类型。我已经重写了代码以符合NSNumber密钥:
的NSDictionary + Utils.m
@implementation NSDictionary (Utils)
- (id)objectAtIndex:(NSInteger)index
{
NSNumber* key = [NSNumber numberWithInteger:index];
return [self objectForKey:key];
}
@end
不幸的是,它总是给出一个空值,但使用:
[self.inputSoundStruct objectForKey:[NSNumber numberWithInteger:0]]
为什么这行代码有效但不是objectAtIndex?我一定错过了什么但是什么?