2

arrayof があり、nsdictionaries各辞書には値があり、ユーザーが行を選択したときに値booleanを変更したい。boolean

しかし、どういうわけか私は得る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"]];


    }
}

上記のコードで何が問題になる可能性がありますか? ありがとう、

スペース

4

1 に答える 1

3

Objective-C コレクション クラスはオブジェクトのみを保持でき、プリミティブ型は保持できないため、次のように変更します。

BOOL isFileChoosen=YES;

に:

NSNumber *isFileChosen = [NSNumber numberWithBool:YES];

ブール値をオブジェクトに効果的にラップするため。

(もちろん、これはコードの他の部分に影響を与えます)。

于 2013-07-08T12:44:20.863 に答える