TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
টেবিলভিউ কনট্রোলারের সাথে কাজ করার সময় এই সতর্কতাটি পাওয়া। কীভাবে এই ত্রুটিটি সংশোধন করবেন এবং কোন ব্লক প্রভাবিত হয়েছে?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
টেবিলভিউ কনট্রোলারের সাথে কাজ করার সময় এই সতর্কতাটি পাওয়া। কীভাবে এই ত্রুটিটি সংশোধন করবেন এবং কোন ব্লক প্রভাবিত হয়েছে?
উত্তর:
যখন কেউ প্রবেশ করার চেষ্টা করছেন তখন এটি উপস্থিত nil
হয়[UIImage imageNamed:]
এর জন্য প্রতীকী ব্রেকআপপয়েন্ট যুক্ত করুন [UIImage imageNamed:]
যোগ $arg3 == nil
সিমুলেটার, উপর শর্ত $r0 == nil
উপর 32 বিট আইফোন শর্ত, অথবা $x2 == nil
64-বিট আইফোনের।
আপনার অ্যাপ্লিকেশন চালান এবং দেখুন ডিবাগারটি কোথায় থামবে।
পিএস মনে রাখবেন এটি যদি চিত্রের নামটি খালি স্ট্রিং থাকে। আপনি [(NSString*)$x2 length] == 0
শর্তটি যুক্ত করে এটি পরীক্ষা করতে পারেন ।
UIImage imageNamed:
পেরে উঠছে না তবে আমি এই ব্রেকপয়েন্টটি সংরক্ষণ করছি।
$arg3
শর্তাধীন ব্রেকপয়েন্টের সিনট্যাক্স সম্পর্কে আমি জানতাম না । আমি কোথায় আরও শিখতে পারি?
error: use of undeclared identifier '$arg3'
। আমি কি কিছু রেখে গেলাম?
(int)[$arg3 length] == 0
এই ত্রুটিটি (সাধারণত) ঘটে যখন আপনি কোনও চিত্র লোড করার চেষ্টা করেন [UIImage imageNamed:myImage]
তবে আইওএস নিশ্চিত নয় যে myImage
এটি সত্যই একটি কিনা NSString
এবং তারপরে আপনার এই সতর্কতা রয়েছে।
আপনি এটি ব্যবহার করে এটি ঠিক করতে পারেন:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
অথবা আপনি কেবল length
এর নামের জন্য যাচাই করতে পারেন UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
যেহেতু ত্রুটিটি যে অভিযোগ করেছে যে আপনি যে নামটি দিয়েছেন (null)
, তাই সম্ভবত এটি কল করার কারণে ঘটে [UIImage imageNamed:nil]
। বা আরও সুনির্দিষ্টভাবে বলা যায় যে কোনও ভেরিয়েবলটিতে পাস করা সেট করা হয়নি, সুতরাং এটি সমান nil
। ব্যবহার করার সময় stringWithFormat:
ত্রুটি থেকে মুক্তি পেতে পারে, আমি মনে করি এটির একটি ভাল সুযোগ আছে যা আসলে আপনি যা চান তা করছে না। আপনার সরবরাহ করা নামটি যদি একটি nil
মান হয় তবে স্ট্রিংউইথ ফর্ম্যাট ব্যবহার করে এর ফলাফলটি আক্ষরিক অর্থে "(নাল)" নামক একটি চিত্রের সন্ধান করবে, যেন আপনি কল করছেন [UIImage imageNamed:@"(null)"]
।
এর মতো কিছু সম্ভবত একটি ভাল বিকল্প:
if (name) {
UIImage *image = [UIImage imageNamed:name];
} else {
// Do something else
}
এই কোডটি প্রথম স্থানে নীল মান দিয়ে কেন ডাকা হচ্ছে কেন তা নির্ধারণ করতে আপনি "অন্য কিছু করুন" লাইনে এক্সকোডে একটি ব্রেকপয়েন্ট স্থাপন করতে চাইতে পারেন।
এক্সকোড .4.৪ এ স্টোরিবোর্ডের কোনও ট্যাব বার আইটেমটির জন্য "নির্বাচিত চিত্র" ব্যবহার করার সময় এটি বৈধ চিত্র হলেও এমনটি মনে হচ্ছে।
এটি আসলে নির্বাচিত রাষ্ট্রীয় চিত্রটি যাইহোক সেট করে নি বলে মনে হয় না, তাই এটি ব্যবহারকারীর সংজ্ঞায়িত রানটাইম বৈশিষ্ট্যগুলিতে সংজ্ঞায়িত করা উচিত এবং ট্যাব বার আইটেমের সलेक्ट করা ইমেজ বৈশিষ্ট্য থেকে সরানো দরকার needs
আমার ক্ষেত্রে আমি [UII চিত্র চিত্রনাম: @ ""] পাশ করছিলাম যা আমাকে সতর্কতা দেখিয়েছে। আপনি ইমেজ নামযুক্ত সমস্ত রেখায় ব্রেকপয়েন্টগুলি যুক্ত করুন এবং যেখানে সতর্কতাটি পাবেন সেখানে লাইনটি ডিবাগ করুন।
[UIImage imageNamed:@""]
। আপনি এটা কিভাবে ঠিক করলেন?
if
পরীক্ষা হলে চিত্র নাম একটি খালি স্ট্রিং নয়, অথবা একটি ডিফল্ট "noImage" ইমেজ ব্যবহার করে, কিভাবে আপনি কোন চিত্র প্রদর্শন না যখন কোনো প্রযোজ্য নাম প্রযোজ্য এবং সম্পদের একটি "noImage" ইমেজ ধারণ করে না?
স্টোরিবোর্ডটি কয়েকটি ভাগে বিভক্ত হওয়ার পরে আমার সাথে এটি ঘটেছিল (আসল পরিবর্তনটি যখন আমি ছুটিতে ছিলাম, সুতরাং কীভাবে এটি করা হয়েছিল আমি ঠিক জানি না)।
স্টোরিবোর্ডগুলির এক্সএমএল পরিদর্শন করার পরে, আমি দেখতে পেলাম যে একটি চিত্র রেফারেন্স যা পূর্বে সম্পদ ক্যাটালগটিতে "নীচে বার" এর দিকে ইঙ্গিত করেছিল imageView:fFo-1g-jzs:image
।
XML ফাইলটির শেষে <resources>
ট্যাগের নীচে <image name="imageView:fFo-1g-jzs:image">
একটি বড় mutableData
ব্লবযুক্ত ট্যাগটির নাম লেখা হয়েছিল ।
স্টোরিবোর্ডে চিত্রের রেফারেন্সটি পুনরায় সেট করার পরে এবং ব্লবটি সরিয়ে দেওয়ার পরে ত্রুটিটি চলে গেছে।
আপনি কিছু অবৈধ চিত্রের নাম সরবরাহ করছেন, সুতরাং এটি স্থাপনের আগে আপনাকে যাচাই করতে হবে আপনার কোডটির জন্য বা পছন্দ মতো যে কোনও উপায়ে উপরের যে কোনও উপায়ে করতে পারেন
if (iconImageName && [iconImageName length])
{
[UIImage imageNamed:iconImageName];
}
else
{
iconImageName.hidden = YES;
}
আশা করি এটি সাহায্য করবে !!!!
ত্রুটির কারণটি "ইমেজনামড:" পদ্ধতিতে একটি শূন্য মান পাচ্ছে। এড়াতে, আপনি যখন নীল মানটি পাস করার চেষ্টা করেন তখন আপনি নিজের চিত্রভিউটি লুকিয়ে রাখতে পারেন। ইউটিআইটিভিউতে চিত্রভিউগুলি পুনরায় ব্যবহার করার বা স্ক্রোলভিউতে থাকতে পারে এর সম্ভাবনা দেখা দিতে পারে।
আমি নীচের চেক দিয়ে সতর্কতা এড়ানো হয়েছে:
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:]
আপনার নিজের প্রয়োগের সাথে , তারপরে আপনার প্রয়োগের ক্ষেত্রে চিত্রের নামটি পরীক্ষা করুন। নিম্নলিখিত দেখুন:
আইওএস-এ কোনও শ্রেণিবদ্ধ পদ্ধতি কীভাবে ঘুরবেন?
আমি এটি আমার ইউআইআইমেজ (ডিবাগ) বিভাগে প্রয়োগ করেছি:
+ (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:]
পাশাপাশি সুইজল করতে চান ।
"ইমেজনাম" "নিল" নয় তা নিশ্চিত করতে আপনি এটি ব্যবহার করতে পারেন; তারপরে আপনি এই সতর্কতাটি ত্যাগ করবেন।
if (imageName) {
self.imageView.image = [UIImage imageNamed:imageName];
}