EXC_BAD_ACCESS(Code = EXC_ARM_DA_ALIGN)在使用BOOL创建NSDictionary时收到

Jef*_*688 1 memory-management exc-bad-access objective-c nsdictionary ios

我正在尝试使用3个元素创建一个字典对象,其中一个元素是BOOL值.我收到一个EXC_BAD_ACCESS(代码= EXC_ARM_DA_ALIGN,地址= 0x5),我使用[NSDictionary dictionaryWithObjectsAndKeys:object,key,nil]将BOOL存储为对象

以下代码有什么问题:

- (void) retrieveAchievmentMetadata
{
[GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:
 ^(NSArray *descriptions, NSError *error) {
     if (error != nil)
     {
         // Process the error.
     }
     if (descriptions != nil)
     {

         [self setAchievementDescriptions:[[NSMutableDictionary alloc] init]]; 

         for (GKAchievementDescription *achievementDescription in descriptions) {

             NSDictionary *achievementData = [NSDictionary dictionaryWithObjectsAndKeys:
                                              [achievementDescription achievedDescription], @"Achieved Description",
                                              [achievementDescription maximumPoints], @"Maximum Points",
                                              [NSNumber numberWithBool:FALSE], @"Level Is Completed", nil];

             [achievementDescriptions setObject:achievementData forKey:[achievementDescription identifier]];

         }
     }
 }];
Run Code Online (Sandbox Code Playgroud)

}

行上发生EXC_BAD_ACCESS错误

[NSNumber numberWithBool:FALSE], @"Level Is Completed", nil];
Run Code Online (Sandbox Code Playgroud)

Emm*_*uel 7

崩溃的原因是[achievementDescription maximumPoints],maximumPoints属性返回的NSInteger不是NSNumber实例.

将其更改为: [NSNumber numberWithInteger:[achievementDescription maximumPoints]], @"Maximum Points", ...

  • 您还可以使用文字语法:@([achievementDescription maximumPoints]) (2认同)