2012-03-19 11 views
13

sto cercando di inizializzare NSDictionary ma mi dà errore seguente:fa NSDictionary initWithObjectsAndKeys gestisce gli oggetti null/nil e diverso NSString oggetti

Program received signal: “EXC_BAD_ACCESS”. 

Ecco il mio codice problematico [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 

E qui è il file Quiz.h per riferimento

@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 

Come devo risolvere il problema, si prega di aiutami, sono nuovo all'obiettivo c e mi sta facendo impazzire. NSWictionary initWithObjectsAndKeys gestisce oggetti diversi da oggetti stringa e null?

risposta

39

NSDictionary non può memorizzare valori scalari (come BOOL, NSInteger, ecc.), Può memorizzare solo oggetti. È necessario avvolgere i valori scalari in NSNumber per archiviarli:

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

Grazie a questo risolto il mio problema. +1 –

+0

Ma ora sto affrontando un altro problema, quando faccio: 'userAnswer = [NSNull null]' ha sempre valore YES? Come posso inizializzare Bool con il valore Null? –

+1

Accetta la risposta se è stata di aiuto. Le variabili booleane non possono essere 'NULL', sono' SÌ' (non zero) o 'NO' (' 0 = NULL == NO'). Hai 'userAnswer = [NSNull null] == YES' dato che' [NSNull null] 'è un oggetto, e hai impostato' userAnswer' con il puntatore a questo oggetto, e il puntatore stesso non è zero, quindi è 'YES' . Non confondere gli oggetti con valori scalari. –

Problemi correlati