ios - পটভূমি থেকে অ্যাপ্লিকেশন খোলার সময় ViewDidAppear বলা হয় না




objective-c iphone (6)

সুইফ্ট 3.0 ++ সংস্করণ

আপনার viewDidLoad , ব্যাকগ্রাউন্ড অ্যাকশন থেকে খোলা শোনাতে বিজ্ঞপ্তি কেন্দ্রটিতে নিবন্ধন করুন

NotificationCenter.default.addObserver(self, selector:#selector(doSomething), name: NSNotification.Name.UIApplicationWillEnterForeground, object: nil)

তারপর এই ফাংশন যোগ করুন এবং প্রয়োজনীয় কর্ম সঞ্চালন

func doSomething(){
    //...
}

অবশেষে আপনার ভিউ কন্ট্রোলারটি ধ্বংস হয়ে গেলে বিজ্ঞপ্তি পর্যবেক্ষক পরিষ্কার করার জন্য এই ফাংশনটি যুক্ত করুন।

deinit {
    NotificationCenter.default.removeObserver(self)
}

আমার একটি কন্ট্রোল কন্ট্রোলার আছে যার মধ্যে আমার মান 0 (লেবেল) এবং যখন আমি অন্য ভিউ কন্ট্রোলার থেকে কন্ট্রোলারটি খুলি তখন আমি viewDidAppear মান ২0 নির্ধারণ করতে viewDidAppear সেট করে viewDidAppear । এটি জরিমানা কাজ করে কিন্তু আমি যখন আমার অ্যাপ্লিকেশনটি বন্ধ করি এবং আবার আমার অ্যাপটি খুলি তবে মান পরিবর্তিত হয় না কারণ viewDidLoad , viewDidAppear এবং viewWillAppear কিছুই বলা হয় না। যখন আমি আমার অ্যাপ খুলি তখন কিভাবে কল করতে পারি। আমি কি ApplicationDidBecomeActive থেকে কিছু করতে হবে?


সুইফট 4.2। সংস্করণ

অ্যাপ্লিকেশনটি যখন পটভূমি থেকে ফেরত আসে তখন viewDidLoad জন্য NotificationCenter এর সাথে নিবন্ধন করুন

NotificationCenter.default.addObserver(self, selector: #selector(doSomething), name: UIApplication.willEnterForegroundNotification, object: nil)

বলা উচিত যে পদ্ধতি বাস্তবায়ন।

@objc private func doSomething() {
    // Do whatever you want, for example update your view.
}

ViewController ধ্বংস হয়ে গেলে আপনি পর্যবেক্ষককে সরাতে পারেন। এটি শুধুমাত্র iOS9 এবং ম্যাকোস 10.11 এর নিচে প্রয়োজন

deinit {
    NotificationCenter.default.removeObserver(self)
}

অ্যাপল এর ডকুমেন্টেশন অনুযায়ী:

(void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated;

বর্ণনা:
একটি শিশু নিয়ামক তার চেহারা পরিবর্তন সম্পর্কে বলছে। আপনি যদি কোনও কাস্টম কন্টেইনার নিয়ামক বাস্তবায়ন করেন তবে এই পদ্ধতিটি শিশুটিকে বলার জন্য ব্যবহার করুন যে এটির দৃশ্যগুলি উপস্থিত বা অদৃশ্য হয়ে যাচ্ছেviewWillAppear: করবেন না viewWillAppear: viewWillDisappear: viewDidAppear: অথবা viewDidDisappear: সরাসরি

(void)endAppearanceTransition;

বর্ণনা:

তার চেহারা পরিবর্তিত হয়েছে একটি শিশু নিয়ামক বলুন। আপনি যদি একটি কাস্টম কন্টেইনার নিয়ামক বাস্তবায়ন করেন তবে দৃশ্যটি ট্রানজিশনটি সম্পন্ন হওয়ার জন্য সন্তানের কাছে এই পদ্ধতিটি ব্যবহার করুন।

কোডের উদাহরণ:

(void)applicationDidEnterBackground:(UIApplication *)application
{

    [self.window.rootViewController beginAppearanceTransition: NO animated: NO];  // I commented this line

    [self.window.rootViewController endAppearanceTransition]; // I commented this line

}

প্রশ্নঃ আমি কিভাবে সংশোধন করবো?

উত্তর : আমি আবেদন লাইন এই টুকরা পাওয়া যায় নি। এই লাইনগুলি আমার অ্যাপ্লিকেশনটিকে কোনও ViewWillAppear বিজ্ঞপ্তির পুনরুদ্ধার করছে না। আমি এই লাইন মন্তব্য যখন এটি জরিমানা কাজ করছে


আমি মনে করি UIAplplicationWillEnterForegroundNotification এর জন্য নিবন্ধনটি ঝুঁকিপূর্ণ কারণ আপনি সেই বিজ্ঞপ্তিটিতে প্রতিক্রিয়া জানাতে একাধিক কন্ট্রোলারের সাথে শেষ করতে পারেন। বিজ্ঞপ্তি গ্রহণ করা হয় যখন এই নিয়ামক এখনও দৃশ্যমান কিছু গ্যারান্টি।

আমি যা করি তা হল: আমি সরাসরি অ্যাপ এর প্রতিনিধি থেকে সরাসরি কন্ট্রোলারের উপর কল ভিউডড্প্পায়ারকে জোর দিয়েছিঃ BecomeActive পদ্ধতি:

নীচের কোড যোগ করুন - (void)applicationDidBecomeActive:(UIApplication *)application

UIViewController *activeController = window.rootViewController;
if ([activeController isKindOfClass:[UINavigationController class]]) {
    activeController = [(UINavigationController*)window.rootViewController topViewController];
}
[activeController viewDidAppear:NO];

শুধু আপনার ভিউ কন্ট্রোলার UIApplicationWillEnterForegroundNotification বিজ্ঞপ্তি জন্য নিবন্ধন আছে এবং সেই অনুযায়ী প্রতিক্রিয়া।


উদ্দেশ্য-সি ব্যবহার করে

আপনার UIApplicationWillEnterForegroundNotification viewDidLoad পদ্ধতিতে একটি UIApplicationWillEnterForegroundNotification নিবন্ধন করা উচিত এবং যখনই অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড থেকে ফিরে আসে তখন আপনি বিজ্ঞাপনের জন্য নিবন্ধিত পদ্ধতিতে যা করতে চান তা করতে পারেন। ভিউ কন্ট্রোলারের ভিউ উইলঅপার বা ভিউডডিপিয়ার যখন ব্যাকগ্রাউন্ড থেকে ফোরাম থেকে ফিরে আসবে তখন বলা হবে না।

-(void)viewDidLoad{

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doYourStuff)

  name:UIApplicationWillEnterForegroundNotification object:nil];
}

-(void)doYourStuff{

   // do whatever you want to do when app comes back from background.
}

আপনি নিবন্ধিত বিজ্ঞপ্তি নিবন্ধন করতে ভুলবেন না।

-(void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

আপনি যদি viewController জন্য আপনার viewController নিবন্ধন করেন তবে মনে রাখবেন আপনার অ্যাপ্লিকেশনটি সক্রিয় হওয়ার সময় আপনার পদ্ধতিটি বলা হবে, এই বিজ্ঞপ্তির জন্য viewController নিবন্ধন করার সুপারিশ করা হয় না।

সুইফট ব্যবহার করে

পর্যবেক্ষক যোগ করার জন্য আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন

 override func viewDidLoad() {
    super.viewDidLoad()

     NSNotificationCenter.defaultCenter().addObserver(self, selector:"doYourStuff", name:
     UIApplicationWillEnterForegroundNotification, object: nil)
 }

 func doYourStuff(){
     // your code
 }

পর্যবেক্ষক অপসারণ করতে আপনি দ্রুত গতিতে deinit ফাংশন ব্যবহার করতে পারেন।

deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}






swift