Я пишу собственный патч для Quartz Composer и работаю со структурами в качестве входных данных.Структура - это NSDictionary в Obj-C, поэтому я использую методы NSDictionary для работы с этими структурами.В зависимости от того, как я строю эти структуры, ключ может иметь тип NSString или NSNumber.
Обычно QC не дает именованные структуры, а ключи имеют значение "0" ... "n" или 0 ... n, поэтому я 'мы решили добавить -objectAtIndex в категорию NSDictionary:
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.В другом проекте я использую патч Queue от Apple.Ключи не являются типом 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?Должно быть, я что-то упустил, но что?