-1

Первый взгляд на следующий код Objective-C:Обработка исключений в NSMutableDictionary

NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 
NSMutableDictionary *oldDict = [[NSMutableDictionary alloc] initWithContentsOfFile: oldDictPath]; 
@try { 
     [newDict setObject:[oldDict objectForKey:@"count"] forKey:@"newCount"]; 
} 
//I want to take "count" value from oldDict and set this to NewDict 
@catch (NSException *exception) { 
     NSLog(@"%@ ",exception.name); 
     NSLog(@"Reason: %@ ",exception.reason); 
} 
@finally { 
     NSLog(@"@@finaly Always Executes"); 
} 

Я хочу взять «рассчитывать» значение из oldDict и установить это NewDict.And проблемы является [oldDict objectForKey:@"count"] может ноль sometime.This можно обрабатывать с помощью if условия как

if([oldDict objectForKey:@"count"] != nil){ //then add to newDict} 

OldDict может иметь 1000 пара, поэтому я не хочу ставить 1000 if statements.

@try и @catch в коде выше, не обрабатывая это исключение. Может ли любой орган сказать мне лучший способ справиться с этими исключениями. Мой код получает сбой.

ответ

0

Попробуйте, как это, нет необходимости добавлять попытке поймать просто позвонить zeroIfNil или сделать необходимые функции, как emptyIfNull и т.д.

-(void)someFunc 
{ 
    NSMutableDictionary *newDict = [[NSMutableDictionary alloc] init]; 
    NSMutableDictionary *oldDict = [[NSMutableDictionary alloc] initWithContentsOfFile: oldDictPath]; 

    [newDict setObject:[self zeroIfNil:[oldDict objectForKey:@"count"]] forKey:@"newCount"]; 
    // TODO : Access all values of of oldDict here and parse them with the 
    // help of custom functions as i suggested. 
} 

-(NSString *)zeroIfNil:(id)object 
{ 
    if(object == nil) { 
     return @"0"; 
    } 
    else { 
     return object; 
    } 
} 
0
NSDictionary *keys = @{ @"count": @"newCount", @"asdf": @"newAsdf" }; 

for (id key in keys) { 
    id object = [oldDict objectForKey:key]; 
    if (object) [newDict setObject:object forKey:[keys objectForKey:key]]; 
} 

Edit: Этот фрагмент кода определяет keys словаря, который отображает старые ключи от новых ключей и итерации по ним, присваивая oldDict [oldKey] для newDict [Проточите новый ключ] для ключей, которые существуют в oldDict. Это позволяет избежать ручного кодирования тысяч назначений, а также обработки исключений, наблюдаемых в вопросе.