2014-04-25 9 views
26

मुझे मिल गया त्रुटि NSInvalidArgumentException यह मेरा मॉडल वर्गNSInvalidArgumentException ', Reas - [__ NSPlaceholderDictionary initWithObjects: forKeys: गिनती:]: प्रयास [4] वस्तुओं से शून्य ऑब्जेक्ट सम्मिलित करने के लिए'

+(NSArray *)users 
{ 
    NSDictionary *user1 = @{@"username" : @"master photographer", @"email" : @"[email protected]", @"password" : @"drowssap", @"age" : @24, @"profilePicture" : [UIImage imageNamed:@"person1.jpeg"]}; 
    NSDictionary *user2 = @{@"username" : @"Lots of tots", @"email" : @"[email protected]", @"password" : @"icecreamrocks", @"age" : @65, @"profilePicture" : [UIImage imageNamed:@"person2.jpeg"]}; 
    NSDictionary *user3 = @{@"username" : @"iTechie", @"email" : @"[email protected]", @"password" : @"infiniteloop", @"age" : @30, @"profilePicture" : [UIImage imageNamed:@"person3.jpeg"]}; 
    NSDictionary *user4 = @{@"username" : @"Royal", @"email" : @"[email protected]", @"password" : @"IGotAPalace", @"age" : @0, @"profilePicture" : [UIImage imageNamed:@"person4.jpeg"]}; 

    NSArray *userArray = @[user1, user2, user3, user4]; 
    return userArray; 
} 

@end 

है और यह मेरा viewDidLoad है

self.users = [DMZUserData users]; 
NSLog(@"%@", self.users); 
+6

आपकी छवियों में से एक (या अधिक) मौजूद नहीं है जिसके परिणामस्वरूप 'शून्य 'है। – rmaddy

+0

मुझे लगता है कि त्रुटि संदेश आपको बताता है कि क्या गलत है। * शब्दकोश मूल्यों की उस सूची में * कुछ भी * जो संभावित रूप से 'शून्य '** हो सकता है **' nil' है। कुछ डिबगिंग करें और इसे स्वयं ढूंढें। – trojanfoe

+1

क्या आपके पास कोई प्रश्न है? – matt

उत्तर

26

त्रुटि का अर्थ है आप शब्दकोश (जिसकी अनुमति नहीं है) में nil डाल करने के लिए कोशिश कर रहे हैं। चूंकि आप स्ट्रिंग अक्षर के साथ शब्दकोश बना रहे हैं, वे nil नहीं हो सकते हैं। इसका मतलब है कि समस्या आपकी एक या अधिक छवियों के साथ है।

मदद करने के लिए समस्या का पता लगाने के लिए इस प्रयास करें:

+(NSArray *)users 
{ 
    UIImage *image1 = [UIImage imageNamed:@"person1.jpeg"]; 
    UIImage *image2 = [UIImage imageNamed:@"person2.jpeg"]; 
    UIImage *image3 = [UIImage imageNamed:@"person3.jpeg"]; 
    UIImage *image4 = [UIImage imageNamed:@"person4.jpeg"]; 

    NSDictionary *user1 = @{@"username" : @"master photographer", @"email" : @"[email protected]", @"password" : @"drowssap", @"age" : @24, @"profilePicture" : image1 }; 
    NSDictionary *user2 = @{@"username" : @"Lots of tots", @"email" : @"[email protected]", @"password" : @"icecreamrocks", @"age" : @65, @"profilePicture" : image2 }; 
    NSDictionary *user3 = @{@"username" : @"iTechie", @"email" : @"[email protected]", @"password" : @"infiniteloop", @"age" : @30, @"profilePicture" : image3 }; 
    NSDictionary *user4 = @{@"username" : @"Royal", @"email" : @"[email protected]", @"password" : @"IGotAPalace", @"age" : @0, @"profilePicture" : image4 }; 

    NSArray *userArray = @[user1, user2, user3, user4]; 
    return userArray; 
} 

अब आप डिबगर का उपयोग करें और अगर image1, image2, image3, या image4 है nil या प्रत्येक के लिए NSLog बयान जोड़ने को देखने या तो कर सकते हैं।

ध्यान रखें कि फ़ाइल नाम केस संवेदी इतना यकीन नाम आप imageNamed: के पास बिल्कुल असली फ़ाइल नाम से मिलान में हो रहे हैं। यह भी सत्यापित करें कि छवियों में एक्सटेंशन jpeg है और jpg नहीं है। सुनिश्चित करें कि छवियों को आपके संसाधन बंडल में पैक किया जा रहा है।

+1

यह भी ध्यान देने योग्य है कि, यदि एक एक्सकोड संपत्ति कैटलॉग का उपयोग किया जाता है, तो एक्सटेंशन को छोड़ा जाना चाहिए। चूंकि छवियां जेपीईजी हैं, इसलिए यह मामला नहीं है, लेकिन अभी भी इसका उल्लेख किया जाना चाहिए। –

1

इसका मतलब है कि उस शब्दकोश में जो मूल्य आप डाल रहे हैं वह शून्य है, संभवतः चित्रों में से एक है। आप छवियों को वेरिएबल्स को असाइन करने का प्रयास कर सकते हैं और यह देख सकते हैं कि यह मामला है या नहीं।

4

UIImages आप बनाने का प्रयास कर रहे हैं में से एक नहीं के बराबर हैं। विधि + की पहली पंक्ति के रूप में निम्न कोड जोड़ें (NSArray *) उन

NSAssert([UIImage imageNamed:@"person1.jpeg"] != nil, @"Person 1 image does not exist"); 
NSAssert([UIImage imageNamed:@"person2.jpeg"] != nil, @"Person 2 image does not exist"); 
NSAssert([UIImage imageNamed:@"person3.jpeg"] != nil, @"Person 3 image does not exist"); 
NSAssert([UIImage imageNamed:@"person4.jpeg"] != nil, @"Person 4 image does not exist"); 

कोड स्निपेट सांत्वना वाले चित्रों के अस्तित्व में नहीं है पर प्रिंट होगा। कृपया DEBUG पर चलाएं और देखें कि दावे का नतीजा क्या है।

आशा है कि इससे मदद मिलती है!

2

बेहतर इलाज शायद इस तरह "NSDictionary" बनाने के लिए है:

NSDictionary *user1 = [NSDictionary dictionaryWithObjectsAndKeys: my obj & key here, nil]; 
+0

यह एक बेहतर इलाज कैसा है? –

+0

, बस क्योंकि इस प्रक्रिया में: + (आईडी) dictionaryWithObjectsAndKeys: (आईडी) फर्स्टऑब्जेक्ट, ... वापसी शून्य कुंजी के लिए एक अपवाद ... की istead: - (आईडी) initWithDictionary: (NSDictionary *) शब्दकोश copyItems: (BOOL) ध्वज (मुझे लगता है कि इस विधि को यहां उदाहरण के लिए बुलाया गया है) ... जो कि शून्य कुंजी के बारे में कुछ भी नहीं लौटता है – Mike97

2

"वस्तुओं से शून्य ऑब्जेक्ट सम्मिलित करने प्रयास [4]" का अर्थ है कि या तो कुंजी या मान सूचकांक पर [4] शून्य है।

तो जैसा कि अन्य लोगों ने कहा यह सूचकांक पर कुंजी के बाद से अपने चित्रों में से एक हो सकता है [4] एक स्ट्रिंग शाब्दिक है।

संबंधित मुद्दे