Обрабатывает ли NSDictionary initWithObjectsAndKeys объекты NULL / nil и отличные от объектов NSString - PullRequest
14 голосов
/ 19 марта 2012

Я пытаюсь инициализировать NSDictionary, но выдает следующую ошибку:

Program received signal:  “EXC_BAD_ACCESS”.

Вот мой проблемный код [Quiz.m]:

@implementation Quiz

@synthesize question;
@synthesize correctAnswer;
@synthesize userAnswer;
@synthesize questionId;

-(NSString*) getAsJsonString
{   
    // Following line gives the error
    NSDictionary *qDictionary=[[NSDictionary alloc] initWithObjectsAndKeys:question,@"questionText",questionId,@"questionId",userAnswer,@"userAnswer",correctAnswer,@"correctAnswer",nil];

    ..............
    .........
    ............
    return jsonString;
}
@end

А вот файл Quiz.h для справки

@interface Quiz : NSObject {

@public
    NSString * question;
    BOOL correctAnswer;
    BOOL userAnswer;
    NSInteger questionId;
}

@property (nonatomic,retain) NSString * question;
@property (nonatomic, assign) NSInteger questionId;
@property (nonatomic,assign) BOOL correctAnswer;
@property (nonatomic,assign) BOOL userAnswer;

- (NSString*) getAsJsonString;
@end

Как мне это исправить, пожалуйста, помогите мне, я новичок в цели c, и это сводит меня с ума. NSDictionary initWithObjectsAndKeys обрабатывает объекты, отличные от строковых и нулевых объектов?

1 Ответ

40 голосов
/ 19 марта 2012

NSDictionary не может хранить скалярные значения (например, BOOL, NSInteger и т. Д.), Он может хранить только объекты. Вы должны обернуть свои скалярные значения в NSNumber, чтобы сохранить их:

NSDictionary *qDictionary = [[NSDictionary alloc]
    initWithObjectsAndKeys:question,@"questionText",
                           [NSNumber numberWithInteger:questionId],@"questionId",
                           [NSNumber numberWithBool:userAnswer],@"userAnswer",
                           [NSNumber numberWithBool:correctAnswer],@"correctAnswer",
                           nil];
...