2013-07-08 2 views
2

У меня есть array из nsdictionaries, каждый из словаря имеет значение boolean, я хочу изменить boolean значения, когда пользователь выбирает строку.EXC_BAD_ACCESS при изменении булева значения в NSDictionary

Но почему-то я получаю exc_bad_access.

Это, как настроить массив словарей:

self.choosedfiles=[[NSMutableArray alloc] init]; 
for (NSString *s in fileListINDoc){ 
     NSArray *partialDates =[s componentsSeparatedByString:@"."];//split string where - chars are found 
     NSFileManager* fm = [NSFileManager defaultManager]; 
     NSDictionary* attrs = [fm attributesOfItemAtPath:[dataPath stringByAppendingPathComponent:s] error:nil]; 
     NSDate *dateLocal =(NSDate*)[attrs objectForKey: NSFileModificationDate]; 

     //creatre unique name for image _AKIAIVLFQKMSRN5JLZJA 
     NSString *uniqueFileName=[NSString stringWithFormat:@"%@_AKIAIVLFQKMSRN5JLZJA_%@.jpeg",[partialDates objectAtIndex: 0],[partialDates objectAtIndex: 1]]; 

     BOOL isFileChoosen=NO; 

     NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
           dateLocal,@"date",uniqueFileName,@"imagename",s,@"name",isFileChoosen,@"isFileChoosen", 
           nil]; 
     [tempArray addObject:params]; 
    } 
    NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]; 
    NSArray *descriptors=[NSArray arrayWithObject: descriptor]; 
    NSArray *reverseOrder=[tempArray sortedArrayUsingDescriptors:descriptors]; 

    self.files=[[NSMutableArray alloc] initWithArray:reverseOrder]; 

Это вызывает ошибку, когда я пытаюсь изменить логическое значение, XCODE показывает линию *params словаря как ошибки:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *currentArticle = [self.files objectAtIndex:indexPath.row]; 
    NSNumber* ischoosenObject =[currentArticle objectForKey:@"isFileChoosen"]; 
    if ([ischoosenObject boolValue]==NO) { 
     BOOL isFileChoosen=YES; 
     NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:[currentArticle objectForKey:@"date"],@"date",[currentArticle objectForKey:@"imagename"],@"imagename",[currentArticle objectForKey:@"name"],@"name",isFileChoosen,@"isFileChoosen",nil]; 
     [self.files replaceObjectAtIndex:indexPath.row withObject:params]; 
     [self.choosedfiles addObject:[currentArticle objectForKey:@"name"]]; 


    } 
} 

Что может проблема в вышеприведенном коде? Спасибо,

Space

ответ

3

коллекция классов Objective-C может содержать только объекты, а не примитивные типы, так меняется:

BOOL isFileChoosen=YES; 

To:

NSNumber *isFileChosen = [NSNumber numberWithBool:YES]; 

для того, чтобы эффективно wrap ваш boolean в объекте.

(Это, конечно же, будет иметь некоторые последствия для других частей вашего кода).

+0

Спасибо за ответ, но почему BOOL isFileChoosen = NO; 'работает, когда я устанавливаю словарь в цикл for, но не работает в' didSelectRowAtIndexPath'? –

+0

@SpaceDust Извините, я не знаю, почему это так. Однако я уверен, что это сломается. – trojanfoe

Смежные вопросы