在NSDictionary初始化中使用时,NSNumber变为nil

bra*_*n56 1 null objective-c nsdictionary nsnumber ios

我有以下代码块:

NSNumber* dayNsNumber = [[NSNumber alloc] initWithInt:dayNumber+1];
NSLog(@"dayNsNumber: %d", [dayNsNumber intValue]);

if(boolVar){

    UIAlertView* success = [[UIAlertView alloc] initWithTitle:@"Title" message:[NSString stringWithFormat:@"Day %d!", dayNumber+1] delegate:self cancelButtonTitle:nil otherButtonTitles:@"Star", nil];
    [success show];
    NSLog(@"dayNsNumber: %d", [dayNsNumber intValue]);
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
            dayNsNumber, "Day Number",
            [self getCurrentLocalDate], @"Date",
            [self getCurrentLocalTime], @"Time",
         nil];
}
Run Code Online (Sandbox Code Playgroud)

会发生什么事情,当我运行代码时,它会在初始化时挂起,params NSDictionary并说它dayNsNumber就是nil.

Xcode显示线程1:EXC_BAD_ACCESS(代码= 1).

我该如何解决这个问题?我想添加dayNsNumber到我的params字典中.

此外,这里是getCurrentLocalDategetCurrentLocalTime:

-(NSString*)getCurrentLocalDate;{ 
    NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"dd-MM-yyyy" options:0 locale:[NSLocale currentLocale]];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:formatString];

    NSString *todayString = [dateFormatter stringFromDate:[NSDate date]];
    NSLog(@"todayString: \"%@\"", todayString);
    return todayString;

}

-(NSString*)getCurrentLocalTime;{
    NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm:ss zzz" options:0 locale:[NSLocale currentLocale]];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:formatString];

    NSString *timeString = [dateFormatter stringFromDate:[NSDate date]];
    NSLog(@"timeString: \"%@\"", timeString);
    return timeString;
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

问题在于关键:"Day Number"应该是@"Day Number".

另请注意,您现在可以为数字,数组和词典使用新语法.例如,这个

NSNumber* dayNsNumber = [[NSNumber alloc] initWithInt:dayNumber+1];
Run Code Online (Sandbox Code Playgroud)

可以像这样重写:

NSNumber* dayNsNumber = @(dayNumber+1);
Run Code Online (Sandbox Code Playgroud)

字典初始化可以像这样完成:

NSDictionary *params = @{
    @"Day Number" :   dayNsNumber
,   @"Date"       : [self getCurrentLocalDate]
,   @"Time"       : [self getCurrentLocalTime]
};
Run Code Online (Sandbox Code Playgroud)