2012-03-19 28 views
13

Tôi cố gắng để khởi NSDictionary nhưng nó mang lại cho tôi lỗi sau:Liệu NSDictionary initWithObjectsAndKeys xử lý NULL/đối tượng bằng không và khác hơn so với các đối tượng NSString

Program received signal: “EXC_BAD_ACCESS”. 

Đây là mã có vấn đề của tôi [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 

Và đây là tập tin Quiz.h để tham khảo

@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 

Làm thế nào tôi nên sửa chữa nó, xin vui lòng giúp tôi, tôi mới đến mục tiêu c và nó là lái xe cho tôi hạt. Liệu các NSDictionary initWithObjectsAndKeys xử lý các đối tượng khác hơn là chuỗi và các đối tượng null?

Trả lời

39

NSDictionary không thể lưu trữ các giá trị vô hướng (như BOOL, NSInteger, v.v.), nó chỉ có thể lưu trữ các đối tượng. Bạn phải quấn các giá trị vô hướng của mình vào NSNumber để lưu trữ chúng:

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

Cảm ơn điều này đã giải quyết được sự cố của tôi. +1 –

+0

Nhưng bây giờ tôi đang gặp phải một vấn đề khác, khi tôi làm: 'userAnswer = [NSNull null]' nó luôn có giá trị YES? Làm thế nào tôi có thể khởi tạo Bool với giá trị Null? –

+1

Chấp nhận câu trả lời nếu nó hữu ích. Các biến Boolean không thể là 'NULL', chúng là' YES' (khác không) hoặc 'NO' (' 0 = NULL == NO'). Bạn có 'userAnswer = [NSNull null] == YES' vì' [NSNull null] 'là một đối tượng, và bạn đặt' userAnswer' với con trỏ tới đối tượng này, và con trỏ chính nó không phải là 0, vì vậy nó là 'YES' . Đừng nhầm lẫn các đối tượng với các giá trị vô hướng. –

Các vấn đề liên quan