“BOOL类型的集合元素”不是objective-c对象

时间:2013-12-07 19:08:47

标签: ios objective-c

任何人都知道我为什么会这样做?

-(void)postPrimaryEMWithEM:(EM *)em
              exclusive:(BOOL) isExclusive
                 success:(void (^)())onSuccess
                 failure:(void (^)())onFailure {


if(self.accessToken) {


    GenericObject *genObject = [[GenericObject alloc] init];

    [[RKObjectManager sharedManager] postObject:genObject
                                          path:@"users/update.json"
                                    parameters:@{
                                                  ...
                                                 @"em_id"  : ObjectOrNull(em.emID),
                                                 @"exclusive": isExclusive  <-- error message

2 个答案:

答案 0 :(得分:11)

您不能在字典中放置基本数据类型。它必须是一个对象。但您可以使用[NSNumber numberWithBool:isExclusive]或使用@(isExclusive)语法:

[[RKObjectManager sharedManager] postObject:genObject
                                       path:@"users/update.json"
                                 parameters:@{
                                              ...
                                             @"em_id"  : ObjectOrNull(em.emID),
                                             @"exclusive": @(isExclusive), ...

我也不怀疑你打算用BOOL *作为参数。你可能想要:

- (void)postPrimaryEMWithEM:(EM *)em
                  exclusive:(BOOL) isExclusive
                    success:(void (^)())onSuccess
                    failure:(void (^)())onFailure {
    ...
}

同样,BOOL不是对象,因此*语法可能不是预期的。

答案 1 :(得分:7)

从BOOL中删除指针('*'):

exclusive:(BOOL*) isExclusive

并改变:

@"exclusive": isExclusive

为:

@"exclusive": [NSNumber numberWithBool:isExclusive]

或:

// Literal version of above NSNumber
@"exclusive": @(isExclusive)

注意,NSDictionary无法存储原始类型,包括布尔值。因此,您必须将值封装在对象中,在本例中为NSNumber。