TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController के साथ काम करते समय यह चेतावनी प्राप्त करना। इस त्रुटि को कैसे सुधारें और कौन सा ब्लॉक प्रभावित होता है?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController के साथ काम करते समय यह चेतावनी प्राप्त करना। इस त्रुटि को कैसे सुधारें और कौन सा ब्लॉक प्रभावित होता है?
जवाबों:
यह तब दिखाई देता है जब कोई अंदर डालने की कोशिश कर रहा होता nil
है[UIImage imageNamed:]
के लिए प्रतीकात्मक विराम बिंदु जोड़ें [UIImage imageNamed:]
$arg3 == nil
सिम्युलेटर पर शर्त जोड़ें , $r0 == nil
32-बिट iPhone पर स्थिति, या $x2 == nil
64-बिट iPhone पर।
अपना एप्लिकेशन चलाएं और देखें कि डिबगर कहां रुकेगा।
PS ध्यान रखें यह तब भी होता है जब छवि का नाम रिक्त स्ट्रिंग है। आप इसे [(NSString*)$x2 length] == 0
शर्त में जोड़कर देख सकते हैं।
UIImage imageNamed:
, लेकिन मैं इस ब्रेकपॉइंट को फिर भी बचा रहा हूं।
$arg3
सशर्त विराम बिंदुओं के लिए वाक्य रचना के बारे में नहीं जानता था । मैं और अधिक कहां से सीखूं?
error: use of undeclared identifier '$arg3'
। क्या मैं कुछ भुल गया?
(int)[$arg3 length] == 0
यह त्रुटि (आमतौर पर) तब होती है जब आप एक छवि को लोड करने की कोशिश करते हैं, [UIImage imageNamed:myImage]
लेकिन iOS सुनिश्चित नहीं है कि क्या myImage
वास्तव में है NSString
और फिर आपके पास यह चेतावनी है।
आप इसका उपयोग करके इसे ठीक कर सकते हैं:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
या आप बस length
के नाम के लिए जाँच कर सकते हैं UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
चूंकि त्रुटि शिकायत कर रही है कि आपने जो नाम दिया है (null)
, यह कॉलिंग के कारण सबसे अधिक संभावना है [UIImage imageNamed:nil]
। या अधिक विशेष रूप से, एक चर में गुजरना निर्धारित नहीं किया गया है, इसलिए यह बराबर है nil
। उपयोग करते समय stringWithFormat:
त्रुटि से छुटकारा मिल जाएगा, मुझे लगता है कि एक अच्छा मौका है यह वास्तव में वह नहीं है जो आप चाहते हैं। यदि आपके द्वारा आपूर्ति किया जाने वाला नाम एक nil
मान है, तो stringWithFormat का उपयोग करें: इसका परिणाम उस छवि की तलाश में होगा जिसे सचमुच "null" नाम दिया गया है, जैसे कि आप कॉल कर रहे थे [UIImage imageNamed:@"(null)"]
।
इस तरह से कुछ शायद एक बेहतर विकल्प है:
if (name) {
UIImage *image = [UIImage imageNamed:name];
} else {
// Do something else
}
आप Xcode पर एक ब्रेकपॉइंट सेट करना चाहते हैं जो "कुछ और करें" लाइन पर, आपको यह पता लगाने में मदद करेगा कि इस कोड को पहले स्थान पर शून्य मान के साथ क्यों बुलाया जा रहा है।
Xcode 6.4 में, स्टोरीबोर्ड में टैब बार आइटम के लिए "चयनित छवि" का उपयोग करते समय ऐसा प्रतीत होता है, भले ही यह एक वैध छवि हो।
यह वास्तव में चयनित राज्य की छवि को वैसे भी सेट करने के लिए प्रतीत नहीं होता है, इसलिए इसे उपयोगकर्ता परिभाषित रनटाइम विशेषताओं में परिभाषित किया जाना चाहिए, और टैब बार आइटम की चयनित विशेषता से हटा दिया जाना चाहिए।
मेरे मामले में मैं [UIImage imageName: @ ""] पास कर रहा था, जिसके कारण मुझे चेतावनी दर्शानी पड़ी। बस उन सभी पंक्तियों में ब्रेकप्वाइंट जोड़ें जहां आपने छवि का उपयोग किया है और उस पंक्ति को डिबग करें जहां आपको चेतावनी मिलती है।
[UIImage imageNamed:@""]
। आपने यह कैसे फिक्स किया?
if
परीक्षण का उपयोग करने के अलावा अगर छवि का नाम कोई रिक्त स्ट्रिंग नहीं है, या डिफ़ॉल्ट "noImage" छवि का उपयोग कर रहा है, तो आप कोई छवि नहीं दिखाते जब कोई लागू नाम लागू नहीं होता है और आस्तियों में "noImage" छवि नहीं होती है?
स्टोरीबोर्ड के कई में विभाजित होने के बाद मेरे साथ ऐसा हुआ (वास्तविक परिवर्तन तब हुआ जब मैं छुट्टियों पर था, इसलिए मुझे नहीं पता कि यह कैसे किया गया था)।
स्टोरीबोर्ड्स के एक्सएमएल का निरीक्षण करने के बाद, मैंने पाया कि एक छवि संदर्भ जो पहले इंगित किया गया था कि संपत्ति सूची में "बॉटबर" को इंगित किया गया था imageView:fFo-1g-jzs:image
।
एक्सएमएल फ़ाइल के अंत में <resources>
टैग के नीचे <image name="imageView:fFo-1g-jzs:image">
एक बड़ा mutableData
ब्लब युक्त टैग था ।
स्टोरीबोर्ड में छवि संदर्भ रीसेट करने और बूँद को हटाने के बाद, त्रुटि दूर हो गई।
आप कुछ अमान्य छवि नाम की आपूर्ति कर रहे हैं, इसलिए इसे डालने से पहले इसे सत्यापित करने की आवश्यकता है आप उपरोक्त तरीकों में से कोई भी कर सकते हैं जो भी आपके कोड या जैसे के लिए समझ में आता है
if (iconImageName && [iconImageName length])
{
[UIImage imageNamed:iconImageName];
}
else
{
iconImageName.hidden = YES;
}
आशा है कि यह मदद करेगा !!!!
त्रुटि का कारण "imageNamed:" विधि के लिए एक शून्य मान गुजर रहा है। इससे बचने के लिए, जब आप शून्य मान को पास करने का प्रयास करते हैं, तो आप अपनी छवि को छिपा सकते हैं। UITableView में imageViews के पुन: उपयोग में संभावना हो सकती है या स्क्रॉल दृश्य में हो सकती है।
मैंने नीचे दिए गए चेक से चेतावनी को टाल दिया:
UIImageView *your_image_view;
NSString *imageName;
if(imageName && imageName.length){
your_image_view.hidden = NO;
your_image_view.image = [UIImage imageNamed:imageName];
}
else {
your_image_view.hidden = YES;
}
एक तरीका यह है कि कक्षा पद्धति [UIImage imageNamed:]
को अपने स्वयं के कार्यान्वयन के साथ बदलने के लिए स्विज़लिंग करें , फिर अपने कार्यान्वयन में छवि का नाम जांचें। निम्नलिखित देखें:
IOS पर क्लास विधि को कैसे स्वाइप करें?
मैंने इसे अपने UIImage (डीबग) श्रेणी में लागू किया:
+ (UIImage *)db_imageNamed:(NSString *)imageName {
if ([imageName length] == 0) {
NSLog(@"breakpoint here");
}
return [self db_imageNamed:imageName]; // not a recursive call here after swizzling
}
आप के [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
रूप में अच्छी तरह से झपकी लेना चाहते हो सकता है ।
हो सकता है कि आप इसका उपयोग इस बात की पुष्टि करने के लिए कर सकते हैं कि "imageName" एक "शून्य" नहीं है; तब आप इस चेतावनी को छोड़ देंगे।
if (imageName) {
self.imageView.image = [UIImage imageNamed:imageName];
}