Я относительно новичок в Objective-C, и теперь у меня есть проблема в приложении для iPhone, которую я не до конца понимаю.
Я пытаюсь использовать NSMutableDictionary
, это, кажется, не работает, как я ожидаю по какой-то причине. Когда я запускаю отладчик и делаю po numberToCallerMap
, чтобы увидеть словарь, я получаю исключение. Я прочитал документацию для NSMutableDictionary
о том, как его инициализировать, но я не вижу, что я делаю неправильно. Помощь и советы приветствуются. Переменная, вызывающая у меня проблему, это numberToCallerMap, вот соответствующая функция:
- (void)setData:(NSString*)value{
[list release];
list = [[NSMutableArray alloc] init];
SBJSON *json = [[[SBJSON alloc] init] autorelease];
NSMutableDictionary* numberToCallerMap;
CallerInfo* caller;
NSDictionary* callerInfo;
@try {
NSArray *array = (NSArray*)[json objectWithString:value];
// reading all the items in the array one by one
numberToCallerMap = [NSMutableDictionary dictionary];
for (id *item in array) {
// if the item is NSDictionary (in this case ... different json file will probably have a different class)
NSDictionary *dict2 = (NSDictionary *) item;
CallInfo *data = [CallInfo alloc];
[data initFromDictionary:dict2];
callerInfo = (NSDictionary*)[dict2 valueForKey:@"caller"] ;
//Here, we want the phonenumber to be part of the CallerInfo object instead.
// It is sent from the server as part of the Call-object
NSString* number = (NSString*)[dict2 valueForKey:@"phoneNumber"];
[callerInfo setValue:number forKey:@"phoneNumber"];
caller = (CallerInfo*)[numberToCallerMap valueForKey:number];
if(caller == nil || [caller isKindOfClass:[NSNull class]]){
caller = [CallerInfo alloc];
[caller initFromDictionary:callerInfo];
[numberToCallerMap setValue:caller forKey:number];
[list insertObject:caller atIndex:0];
}
[caller addRecentCall:data];
}
}
@catch (NSException * e) {
[list release];
list = [[NSMutableArray alloc] init];
}
@finally {
[numberToCallerMap release];
}
}