সুইফট ৩.০ তে নোটিফিকেশন সেন্টার এবং সুইফট ২.০ এ এনএসনিটিফিকেশন সেন্টার ব্যবহার করে কীভাবে ডেটা পাস করবেন?


121

আমি socket.ioআমার সুইফট আইওএস অ্যাপ্লিকেশনটিতে প্রয়োগ করছি ।

বর্তমানে বেশ কয়েকটি প্যানেলে আমি সার্ভারটি শুনছি এবং আগত বার্তাগুলির জন্য অপেক্ষা করছি। getChatMessageপ্রতিটি প্যানেলে ফাংশনটি কল করে আমি এটি করছি :

func getChatMessage(){
    SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            //do sth depending on which panel user is
        })
    }
}

তবে আমি লক্ষ্য করেছি যে এটি একটি ভুল পদ্ধতি এবং আমার এটি পরিবর্তন করা দরকার - এখন আমি কেবল একবার এবং যখনই কোনও বার্তা আসে তখন আগত বার্তাগুলি শুনতে শুরু করতে চাই - এই বার্তাটি শোনার কোনও প্যানেলে পৌঁছে দিন।

সুতরাং আমি এনএসএনটিফিকেশন সেন্টারের মাধ্যমে আগত বার্তাটি পাস করতে চাই। এতক্ষণ আমি তথ্যটি পাস করতে সক্ষম হয়েছি যে কিছু ঘটেছে, তবে ডেটা নিজেই পাস করে নি। আমি এটি করে যাচ্ছিলাম:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)

তারপরে আমার একটি ফাংশন নামে পরিচিত ছিল:

func showSpinningWheel(notification: NSNotification) {
}

এবং যে কোনও সময় আমি এটি করতে চেয়েছিলাম আমি করছি:

NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)

সুতরাং আমি কীভাবে অবজেক্টটি পাস করব messageInfoএবং এটিকে ফাংশনটিতে অন্তর্ভুক্ত করব যা কল হয়ে যায়?


2
ব্যবহারকারীর সাথে পদ্ধতি ব্যবহার করুন ...NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)
EI ক্যাপ্টেন v2.0

এইচএম ঠিক আছে, এবং আমি কীভাবে এটিকে ফাংশনটিতে আনতে পারি yourValueযা সেই বিজ্ঞপ্তিতে (ইন showSpinningWheel) ডাকে ?
ব্যবহারকারী 3766930

.userinfoমত ব্যবহার করুনnotification.userinfo
EI ক্যাপ্টেন v2.0

উত্তর:


276

সুইফট ২.০

userInfoপ্রকারের alচ্ছিক অভিধান যা ব্যবহার করে পাস করুন তথ্য [এনএসওজেক্ট: যেকোনওজেক্ট]?

  let imageDataDict:[String: UIImage] = ["image": image]

  // Post a notification
  NSNotificationCenter.defaultCenter().postNotificationName(notificationName, object: nil, userInfo: imageDataDict)

 // Register to receive notification in your class
 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: notificationName, object: nil)

 // handle notification
 func showSpinningWheel(notification: NSNotification) { 

  if let image = notification.userInfo?["image"] as? UIImage {
  // do something with your image   
  }
 }

উপরের সুইফট 3.0 সংস্করণ

ব্যবহারকারীআইফোন এখন [যেকোন হ্যাশাবল: কোনও] নেয়? যুক্তি হিসাবে, যা আমরা সুইফটে একটি আক্ষরিক হিসাবে প্রদান করি

  let imageDataDict:[String: UIImage] = ["image": image]

  // post a notification
  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
  // `default` is now a property, not a method call

 // Register to receive notification in your class
 NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

 // handle notification
 // For swift 4.0 and above put @objc attribute in front of function Definition  
 func showSpinningWheel(_ notification: NSNotification) {

  if let image = notification.userInfo?["image"] as? UIImage {
  // do something with your image   
  }
 }

দ্রষ্টব্য: বিজ্ঞপ্তি "নামগুলি" আর স্ট্রিং নয়, তবে বিজ্ঞপ্তি.নাম টাইপের, তাই আমরা কেন ব্যবহার করছি NSNotification.Name(rawValue:"notificationName")এবং আমরা আমাদের নিজস্ব কাস্টম বিজ্ঞপ্তি সহ বিজ্ঞপ্তি.নামটি প্রসারিত করতে পারি।

extension Notification.Name {
static let myNotification = Notification.Name("myNotification")
}

// and post notification like this
NotificationCenter.default.post(name: .myNotification, object: nil)

46

সুইফট 3 এর জন্য

let imageDataDict:[String: UIImage] = ["image": image]

  // post a notification
  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
  // `default` is now a property, not a method call

 // Register to receive notification in your class
 NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

 // handle notification
 func showSpinningWheel(_ notification: NSNotification) {
        print(notification.userInfo ?? "")
        if let dict = notification.userInfo as NSDictionary? {
            if let id = dict["image"] as? UIImage{
                // do something with your image
            }
        }
 }

সুইফট 4 এর জন্য

let imageDataDict:[String: UIImage] = ["image": image]

  // post a notification
  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
  // `default` is now a property, not a method call

 // Register to receive notification in your class
 NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

 // handle notification
 @objc func showSpinningWheel(_ notification: NSNotification) {
        print(notification.userInfo ?? "")
        if let dict = notification.userInfo as NSDictionary? {
            if let id = dict["image"] as? UIImage{
                // do something with your image
            }
        }
 }

1
আমার জন্য কাজ করেছেন সুইফট 4
রবি

19

হ্যালো @ সাহিল আমি আপনার উত্তরটি দ্রুত 3 এর জন্য আপডেট করছি

let imageDataDict:[String: UIImage] = ["image": image]

  // post a notification
  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
  // `default` is now a property, not a method call

 // Register to receive notification in your class
 NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

 // handle notification
 func showSpinningWheel(_ notification: NSNotification) {
        print(notification.userInfo ?? "")
        if let dict = notification.userInfo as NSDictionary? {
            if let id = dict["image"] as? UIImage{
                // do something with your image
            }
        }
 }

আশা করি এটি সহায়ক। ধন্যবাদ


3
নোটিফিকেশন.ইউসারিনফো হওয়া উচিত, নোটিফিকেশন.অবজেক্ট
পাক হো চেং

1
আপনি যদি উদ্দেশ্য-সি শ্রেণি / বিজ্ঞপ্তি থেকে অবজেক্ট / অভিধান পেয়ে থাকেন তবে আপনাকে অবশ্যই অবজেক্টটি ব্যবহার করতে হবে। আপনি যদি সুইফট নোটিফিকেশন থেকে অবজেক্ট পেয়ে থাকেন তবে .userInfo ব্যবহার করুন। এটি যদি অবজেক্ট বা .userInfo এর সাথে থাকে: ফ্যানক পর্যবেক্ষক নোটিকেশন (বিজ্ঞপ্তি: এনএসনিটিফিকেশন) {মুদ্রণ ("বিজ্ঞপ্তি গৃহীত:", বিজ্ঞপ্তি)}
ডক্সি

আপনি যদি সেই নোটিফিকেশন কীতে পোস্ট করার আগে আপনি সেই কীটিতে পর্যবেক্ষক সেট আপ করেছেন এমন থ্রেডগুলি জুড়ে পাঠাচ্ছেন কিনা তা নিশ্চিত করুন। আপনি শর্ত শ্রোতা এবং ইভেন্টের সাথে আরও পরিচিত হতে পারেন।
হারুন

2

এইভাবেই আমি এটি বাস্তবায়ন করি।

let dictionary = self.convertStringToDictionary(responceString)            
     NotificationCenter.default.post(name: NSNotification.Name(rawValue: "SOCKET_UPDATE"), object: dictionary)

0

দ্রুতগতিতে 4.2 এ আমি এনএসএনটিফিকেশন ব্যবহার করে কোডটি দেখানোর ও লুকানোর জন্য নিম্নলিখিত কোডগুলি ব্যবহার করেছি

 @objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo? [UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardheight = keyboardSize.height
        print(keyboardheight)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.