2013-12-07 2 views
6

У кого-нибудь есть ключ, почему я получаю это?«элемент коллекции типа BOOL» не является объектом-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 
+0

бы эта работа '(аннулируются) postPrimaryEMWithEM: (EM *) эм эксклюзив: (BOOL) isExclusive успех: (аннулируются (^)()) OnSuccess недостаточность: (пустота (^)()) onFailure' – logixologist

+0

Нет. Я попробовал это первым. – jdog

+0

Должен 'isExclusive' быть' BOOL * ', а не только' BOOL'? На самом деле у вас могут быть две проблемы. Использование 'BOOL *' отлично, если цель параметра - вернуть значение вызывающему. – rmaddy

ответ

9

Вы не можете поместить фундаментальный тип данных в словарь. Это должен быть объект. Но вы можете использовать [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 не является объектом, поэтому синтаксис * предположительно не предназначен.

+2

также обратите внимание, что 'isExclusive' является' BOOL * '. – rmaddy

+1

Также удалите тип указателя из объявления класса: postPrimaryEMWithEM: exclusive: (BOOL) isExclusive. – Greg

+0

@rmaddy Да, я расширил свой ответ, пока вы с Грегом отправляли свои комментарии. Совершенно верно. – Rob

5

Удалить указатель ('*') образуют свой BOOL:

exclusive:(BOOL*) isExclusive 

и изменения:

@"exclusive": isExclusive 

к:

@"exclusive": [NSNumber numberWithBool:isExclusive] 

или:

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

Как примечание, NSDictionary не может хранить примитивные типы, включая булевы. Таким образом, вы должны инкапсулировать значение в объект, в данном случае NSNumber.

+3

Зачем стоит дублировать ответ? – rmaddy

+0

Зачем оставлять ответ в то же время, что вы имеете в виду? Я не видел предыдущего ответа, когда писал. Должен ли я удалить свой ответ, потому что я не видел, чтобы подобное было опубликовано? – Chris

+0

Вы имеете в виду около 15 минут. – rmaddy

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