2012-03-19 11 views
13

मैं NSDictionary प्रारंभ करने में कोशिश कर रहा हूँ संभालती है, लेकिन यह मुझे निम्न त्रुटि देता है:करता NSDictionary initWithObjectsAndKeys शून्य/शून्य वस्तुओं और NSString के अलावा अन्य वस्तुओं

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 

मैं इसे कैसे ठीक करना चाहिए, कृपया मेरी मदद करो, मैं उद्देश्य सी के लिए नया हूँ और यह मुझे पागल कर रहा है। क्या NSDictionary initWithObjectsAndKeys स्ट्रिंग और शून्य ऑब्जेक्ट्स के अलावा अन्य ऑब्जेक्ट्स को संभालता है?

उत्तर

39

NSDictionary स्केलर मानों (जैसे BOOL, NSInteger, आदि) को स्टोर नहीं कर सकता है, यह केवल ऑब्जेक्ट्स स्टोर कर सकता है। आपको अपने स्केलर मानों को NSNumber में स्टोर करने के लिए उन्हें लपेटना होगा:

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

धन्यवाद, यह मेरी समस्या का समाधान करता है। +1 –

+0

लेकिन मुझे अब एक और समस्या का सामना करना पड़ रहा है, जब मैं करता हूं: 'userAnswer = [NSNull null]' यह हमेशा मूल्य मानता है? मैं नूल वैल्यू के साथ बूल कैसे शुरू कर सकता हूं? –

+1

अगर जवाब में मदद मिली तो उसे स्वीकार करें। बूलियन चर 'शून्य' नहीं हो सकते हैं, वे या तो 'हाँ' (गैर-शून्य) या 'NO' (' 0 = NULL == NO') हैं। आपके पास 'userNswer = [NSNull null] == YES' है [NSNull null]' एक ऑब्जेक्ट है, और आप इस ऑब्जेक्ट के पॉइंटर के साथ 'userAnswer' सेट करते हैं, और पॉइंटर स्वयं शून्य नहीं है, इसलिए यह 'हाँ' है । स्केलर मूल्यों के साथ वस्तुओं को भ्रमित मत करो। –