"অ্যাপ্লিকেশনটি একটি সক্রিয় নিয়ামককে মডেল উপস্থাপন করার চেষ্টা করেছিল"?


101

আমি সবেমাত্র একটি ক্র্যাশ পেরিয়ে এসেছি NSInvalidArgumentExceptionএমন একটি অ্যাপ্লিকেশনটিতে এই বার্তাটির সাথে একটি দেখায় যা আগে এই কাজটি করে না।

অ্যাপ্লিকেশনটি একটি সক্রিয় নিয়ামক UITabBarController: 0x83d7f00 উপস্থাপন করার চেষ্টা করেছিল।

আমার একটি UITabBarControllerযা আমি তৈরি করেছি AppDelegateএবং এটির অ্যারে দেব UIViewControllers

এর মধ্যে একটিতে যখন আমি এতে আলতো চাপছি তখন আমি মোডালি উপস্থাপন করতে চাই। আমি এটি ডেলিগেট পদ্ধতিটি প্রয়োগ করে করেছি

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

আমি যদি ভিডিয়ো কন্ট্রোলারটি মডেলভাবে উপস্থাপন করতে চাই তার শ্রেণীর হয় তবে আমি কোনও ফিরিয়ে দিই না do

[tabBarController presentModalViewController:viewController animated:YES];

এবং এখন আমি সেই ত্রুটিটি পাচ্ছি, যার অর্থ এই যে আপনি অন্যভাবে সক্রিয় এমন কোনও ভিউ কন্ট্রোলার উপস্থাপন করতে পারবেন না (ট্যাববারে ...) আমার বলা উচিত আমি এক্সকোড ৪.২ বিকাশকারীর পূর্বরূপ 7, সুতরাং এটি আইওএস 5 (আমি এনডিএ সম্পর্কে জানি, তবে আমি মনে করি যে আমি কোনও নিষিদ্ধ বিবরণ দিচ্ছি না)। এই আইওএস 4 এসডিকে বিপরীতে সংকলন ক্রাশ হয়ে যায় কিনা তা পরীক্ষা করার জন্য আমার কাছে বর্তমানে একটি এক্সকোড ইনস্টলেশন নেই but

আমি কেবল এটিই জিজ্ঞাসা করতে চেয়েছিলাম যে কেউ এই সমস্যাটি অনুভব করেছে বা তার কোনও পরামর্শ আছে কিনা


আইওএস 5 এর পূর্বে, এটি একটি ব্যতিক্রম বাড়েনি, তবে কিছুই ফেরেনি returned আইওএস 5 অন থেকে, এই আদেশটি একটি ব্যতিক্রম উত্থাপন করে।
ফ্রেডেরিক অ্যাডা

উত্তর:


104

ধরুন আপনার কাছে এমন তিনটি ভিউ কন্ট্রোলার ইনস্ট্যান্টেড রয়েছে:

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];

আপনি এগুলি এ জাতীয় ট্যাব বারে যুক্ত করেছেন:

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];

এখন আপনি এই জাতীয় কিছু করার চেষ্টা করছেন:

[tabBarController presentModalViewController:vc3];

এটি আপনাকে একটি ত্রুটি দেবে কারণ আপনি যে ভিউ কন্ট্রোলারটি দিয়েছিলেন তা ট্যাব বার নিয়ন্ত্রকের মৃত্যুর হাতের মুঠোয় রয়েছে। আপনি হয় তা ট্যাব বারের দৃশ্যের নিয়ামকের অ্যারেতে যুক্ত করতে পারবেন না বা আপনি এটি আধুনিকভাবে উপস্থাপন করতে পারবেন না।

অ্যাপল আশা করে আপনি তাদের ইউআই উপাদানগুলি একটি নির্দিষ্ট উপায়ে চিকিত্সা করবেন। এটি সম্ভবত কোথাও হিউম্যান ইন্টারফেস নির্দেশিকাতে সমাহিত করা হয়েছে "এটি করবেন না কারণ আমরা আশা করি না যে আপনি কখনও এটি করতে চান"।


6
জিনিসটি হ'ল আইওএস 5 এর আগে এটি একেবারে কোনও সমস্যা ছিল না, তাই আমার উদ্বেগ! আমি যা করেছি তা হ'ল ট্যাববারে একটি ডামি ইউআইভিউউকন্ট্রোলার যুক্ত করা এবং আধুনিকভাবে আসল ভিউ নিয়ন্ত্রক সাবক্লাস উদাহরণ উপস্থাপন করা।
জাভিয়ের সোটো

4
@ আইসওয়্যাঙ্ক, এখন আইওএস 6-এ, জিনিসগুলিকে "সহজ" করার জন্য তারা বর্তমান মডেলভিউ কনট্রোলারকে হরহামেশা থেকে সমস্ত ধরণের ঘূর্ণন সমস্যা সৃষ্টি করে ... আপনাকে উপস্থিত ভিউকন্ট্রোলার ব্যবহার করতে হবে: অ্যানিমেটেড: আপনার অ্যাপ্লিকেশন কীভাবে পরিবর্তনগুলি পরিচালনা করছে তা পরীক্ষা করুন
কেন

15

আমি একই সমস্যা আছে। আমি বরখাস্ত করার পরে ভিউ কন্ট্রোলার উপস্থাপন করার চেষ্টা করি।

[self dismissModalViewControllerAnimated:YES];

আমি যখন অ্যানিমেশন ছাড়াই এটি করার চেষ্টা করি এটি পুরোপুরি কার্যকর হয় তাই সমস্যাটি হ'ল নিয়ামক এখনও বেঁচে আছেন। আমি মনে করি dismissViewControllerAnimated:completion:আইওএস 5 এর জন্য সবচেয়ে ভাল সমাধানটি ব্যবহার করা


এটি যদি আপনি এনিমেটেডটিকে বরখাস্ত করেন তবে এটি ব্যর্থ হয় কারণ আপনি যখন মডেল ভিউ কন্ট্রোলারটিকে আবার উপস্থাপন করতে চান তখন এটি পর্দায় এখনও অ্যানিমেটেড হয়ে যায়।
পাস্কাল

4
এটি আইওএস 6.0 এ চিত্রিত হয়েছে
সুমিত কুমার সাহা

12

আমার ক্ষেত্রে আমি বিভিন্ন ভিউ কন্ট্রোলার থেকে ভিউ কন্ট্রোলারকে (আমার কাছে ট্যাববারভিউ কনট্রোলারটিতে ভিউকন্ট্রোলারের রেফারেন্স রয়েছে) উপস্থাপন করার চেষ্টা করা হয়েছিল এবং এটি উপরের বার্তার সাথে ক্র্যাশ হচ্ছিল। সেক্ষেত্রে উপস্থাপনা এড়াতে আপনি ব্যবহার করতে পারেন

ভিউকন্ট্রোল.আর.বিসিংপ্রেসেন্টেড

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}

কাউকে সাহায্য করতে পারে।


এটি কেবল ভিউল্লাপ্পেরারে কাজ করছে তবে ভিউকন্ট্রোলার যা ইতিমধ্যে উপস্থাপিত হওয়ার আগে আমি এটি যাচাই করেছি, এটি সর্বদা মিথ্যা প্রত্যাবর্তন false
গুরু

4
আমার জন্য কাজ করছে না। তবুও অ্যাপ ক্রাশ হয়। (! ভিউকন্ট্রোলআর.প্রেসেন্টিংভিউকন্ট্রোলার) সমস্যার সমাধান হয়েছে।
আরগাস

3

আমারও একই সমস্যা ছিল I আপনি এই কোড চেষ্টা করতে পারেন:

[tabBarController setSelectedIndex:1];
[self dismissModalViewControllerAnimated:YES];

3

একই সমস্যা ত্রুটি আমার যখন ঘটেছিল তখন আমি যখন presentতার UINavigationViewControllerপিতামাতার পরিবর্তে কোনও শিশু দেখার নিয়ামককে চেষ্টা করি


0

সরিয়ে ফেলুন

[tabBarController presentModalViewController:viewController animated:YES];

এবং রাখা

[self dismissModalViewControllerAnimated:YES];

এটি অবহেলিত সতর্কতা দেয় ... সুতরাং এর বিকল্প কী?
কীর্তিকুমার এ।

এখানে আমি ব্যবহার করেছি [ব্লকসেলফ বরখাস্ত ভিউকন্ট্রোলারএনিমেটেড: হ্যাঁ সমাপ্তি: শূন্য];
কির্তিকুমার এ

0

পরিবর্তে ব্যবহার করুন:

self.present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)

তুমি ব্যবহার করতে পার:

self.navigationController?.pushViewController(viewController: UIViewController, animated: Bool)

0

আমার ক্ষেত্রে, আমি উপস্থাপন করেছিলেন rootViewControllerএকটি এর UINavigationControllerযখন আমি উপস্থাপন করার কথা ছিল UINavigationControllerনিজেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.