অ্যাপল প্ল্যাটফর্মে ডেটার তালিকা নিয়ে কাজ করুন

একটি FIRDatabaseReference পান

ডাটাবেস থেকে ডেটা পড়তে বা লিখতে, আপনার FIRDatabaseReference এর একটি উদাহরণ প্রয়োজন:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
var ref: DatabaseReference!

ref = Database.database().reference()

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];

পড়া এবং তালিকা লেখা

ডেটার তালিকায় যুক্ত করুন

মাল্টি-ইউজার অ্যাপ্লিকেশানগুলিতে একটি তালিকায় ডেটা যুক্ত করতে childByAutoId পদ্ধতি ব্যবহার করুন। প্রতিবার নির্দিষ্ট ফায়ারবেস রেফারেন্সে একটি নতুন শিশু যোগ করা হলে childByAutoId পদ্ধতি একটি অনন্য কী তৈরি করে। তালিকার প্রতিটি নতুন উপাদানের জন্য এই স্বয়ংক্রিয়-উত্পাদিত কীগুলি ব্যবহার করে, অনেক ক্লায়েন্ট একই সময়ে শিশুদের লেখার দ্বন্দ্ব ছাড়াই একই স্থানে যুক্ত করতে পারে। childByAutoId দ্বারা উত্পন্ন অনন্য কী একটি টাইমস্ট্যাম্পের উপর ভিত্তি করে, তাই তালিকা আইটেমগুলি স্বয়ংক্রিয়ভাবে কালানুক্রমিকভাবে অর্ডার করা হয়।

আপনি childByAutoId পদ্ধতির দ্বারা প্রত্যাবর্তিত নতুন ডেটার রেফারেন্স ব্যবহার করে সন্তানের স্বয়ংক্রিয়-উত্পন্ন কী বা সন্তানের জন্য ডেটা সেট করার মান পেতে পারেন। একটি childByAutoId রেফারেন্সে getKey কল করা স্বয়ংক্রিয়ভাবে তৈরি কী ফেরত দেয়।

আপনি আপনার ডেটা স্ট্রাকচারকে সমতল করার জন্য এই স্বয়ংক্রিয়-উত্পন্ন কীগুলি ব্যবহার করতে পারেন। আরও তথ্যের জন্য, ডেটা ফ্যান-আউট উদাহরণ দেখুন।

শিশু ঘটনা শুনুন

শিশু ঘটনাগুলি নির্দিষ্ট অপারেশনের প্রতিক্রিয়া হিসাবে ট্রিগার করা হয় যা একটি অপারেশন থেকে একটি নোডের শিশুদের ক্ষেত্রে ঘটে যেমন শিশু দ্বারা একটি নতুন শিশু যোগ করা হয়েছে বা childByAutoId ​​পদ্ধতির মাধ্যমে updateChildValues করা হয়েছে৷

ইভেন্টের ধরন সাধারণ ব্যবহার
FIRDataEventTypeChildAdded আইটেমগুলির তালিকা পুনরুদ্ধার করুন বা আইটেমগুলির একটি তালিকায় সংযোজনের জন্য শুনুন। এই ইভেন্টটি প্রতিটি বিদ্যমান শিশুর জন্য একবার ট্রিগার করা হয় এবং তারপরে প্রতিবার নির্দিষ্ট পথে একটি নতুন শিশু যোগ করা হয়। শ্রোতাকে নতুন সন্তানের ডেটা সম্বলিত একটি স্ন্যাপশট দেওয়া হয়।
FIRDataEventTypeChildChanged একটি তালিকার আইটেম পরিবর্তনের জন্য শুনুন. একটি চাইল্ড নোড পরিবর্তন করা হলে এই ইভেন্টটি ট্রিগার করা হয়। এর মধ্যে চাইল্ড নোডের বংশধরদের যেকোনো পরিবর্তন অন্তর্ভুক্ত রয়েছে। ইভেন্ট শ্রোতার কাছে পাঠানো স্ন্যাপশটে সন্তানের জন্য আপডেট করা ডেটা রয়েছে।
FIRDataEventTypeChildRemoved একটি তালিকা থেকে আইটেম মুছে ফেলার জন্য শুনুন. এই ইভেন্টটি ট্রিগার হয় যখন একটি অবিলম্বে শিশুকে সরানো হয়৷ কলব্যাক ব্লকে পাস করা স্ন্যাপশটে সরানো সন্তানের ডেটা থাকে৷
FIRDataEventTypeChildMoved অর্ডার করা তালিকায় আইটেমের ক্রম পরিবর্তনের জন্য শুনুন। এই ইভেন্টটি ট্রিগার করা হয় যখনই একটি আপডেট শিশুর পুনর্বিন্যাস ঘটায়। এটি queryOrderedByChild বা queryOrderedByValue দ্বারা অর্ডার করা ডেটার সাথে ব্যবহার করা হয়।

ডাটাবেসের একটি নির্দিষ্ট নোডের পরিবর্তনগুলি শোনার জন্য এইগুলির প্রত্যেকটি একসাথে কার্যকর হতে পারে। উদাহরণস্বরূপ, একটি সামাজিক ব্লগিং অ্যাপ একটি পোস্টের মন্তব্যে কার্যকলাপ নিরীক্ষণ করতে এই পদ্ধতিগুলি একসাথে ব্যবহার করতে পারে, যেমনটি নীচে দেখানো হয়েছে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// Listen for new comments in the Firebase database
commentsRef.observe(.childAdded, with: { (snapshot) -> Void in
  self.comments.append(snapshot)
  self.tableView.insertRows(
    at: [IndexPath(row: self.comments.count - 1, section: self.kSectionComments)],
    with: UITableView.RowAnimation.automatic
  )
})
// Listen for deleted comments in the Firebase database
commentsRef.observe(.childRemoved, with: { (snapshot) -> Void in
  let index = self.indexOfMessage(snapshot)
  self.comments.remove(at: index)
  self.tableView.deleteRows(
    at: [IndexPath(row: index, section: self.kSectionComments)],
    with: UITableView.RowAnimation.automatic
  )
})

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// Listen for new comments in the Firebase database
[_commentsRef
              observeEventType:FIRDataEventTypeChildAdded
              withBlock:^(FIRDataSnapshot *snapshot) {
                [self.comments addObject:snapshot];
                [self.tableView insertRowsAtIndexPaths:@[
                  [NSIndexPath indexPathForRow:self.comments.count - 1 inSection:kSectionComments]
                ]
                                      withRowAnimation:UITableViewRowAnimationAutomatic];
              }];
// Listen for deleted comments in the Firebase database
[_commentsRef
 observeEventType:FIRDataEventTypeChildRemoved
 withBlock:^(FIRDataSnapshot *snapshot) {
   int index = [self indexOfMessage:snapshot];
   [self.comments removeObjectAtIndex:index];
   [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:kSectionComments]]
                         withRowAnimation:UITableViewRowAnimationAutomatic];
 }];

মান ঘটনা জন্য শুনুন

যদিও শিশু ইভেন্টের জন্য শোনা তথ্যের তালিকা পড়ার প্রস্তাবিত উপায়, সেখানে এমন পরিস্থিতিতে আছে যে তালিকার রেফারেন্সে মূল্য ইভেন্টের জন্য শোনা দরকারী।

ডেটার একটি তালিকার সাথে একটি FIRDataEventTypeValue পর্যবেক্ষক সংযুক্ত করা ডেটার সম্পূর্ণ তালিকাকে একটি একক ডেটাস্ন্যাপশট হিসাবে ফিরিয়ে দেবে, যা আপনি পৃথক শিশুদের অ্যাক্সেস করতে লুপ করতে পারেন।

এমনকি যখন ক্যোয়ারীটির জন্য শুধুমাত্র একটি মিল থাকে, তখনও স্ন্যাপশটটি একটি তালিকা; এটা শুধু একটি আইটেম রয়েছে. আইটেমটি অ্যাক্সেস করতে, আপনাকে ফলাফলটি লুপ করতে হবে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
_commentsRef.observe(.value) { snapshot in
  for child in snapshot.children {
    ...
  }
}

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
[_commentsRef
              observeEventType:FIRDataEventTypeValue
              withBlock:^(FIRDataSnapshot *snapshot) {
                // Loop over children
                NSEnumerator *children = [snapshot children];
                FIRDataSnapshot *child;
                while (child = [children nextObject]) {
                  // ...
                }
              }];

এই প্যাটার্নটি উপযোগী হতে পারে যখন আপনি অতিরিক্ত শিশু যুক্ত ইভেন্টের জন্য শোনার পরিবর্তে একটি একক অপারেশনে একটি তালিকার সমস্ত শিশু আনতে চান।

তথ্য বাছাই এবং ফিল্টারিং

কী, মান অনুসারে বা শিশুর মান অনুসারে সাজানো ডেটা পুনরুদ্ধার করতে আপনি Realtime Database FIRDatabaseQuery ক্লাস ব্যবহার করতে পারেন। আপনি বাছাই করা ফলাফলকে নির্দিষ্ট সংখ্যক ফলাফল বা কী বা মানের পরিসরে ফিল্টার করতে পারেন।

তথ্য সাজান

বাছাই করা ডেটা পুনরুদ্ধার করতে, ফলাফলগুলি কীভাবে অর্ডার করা হয় তা নির্ধারণ করতে অর্ডার-বাই পদ্ধতিগুলির একটি নির্দিষ্ট করে শুরু করুন:

পদ্ধতি ব্যবহার
queryOrderedByKey চাইল্ড কী দ্বারা ফলাফল অর্ডার করুন।
queryOrderedByValue সন্তানের মান অনুযায়ী ফলাফল ক্রম করুন।
queryOrderedByChild একটি নির্দিষ্ট চাইল্ড কী বা নেস্টেড চাইল্ড পাথের মান অনুসারে ফলাফল ক্রম করুন।

আপনি একটি সময়ে শুধুমাত্র একটি অর্ডার পদ্ধতি ব্যবহার করতে পারেন. একই ক্যোয়ারীতে একাধিকবার অর্ডার-বাই মেথড কল করলে একটি ত্রুটি দেখা দেয়।

নিম্নলিখিত উদাহরণটি দেখায় যে আপনি কীভাবে একজন ব্যবহারকারীর শীর্ষ পোস্টের তালিকা পুনরুদ্ধার করতে পারেন তাদের তারকা সংখ্যা অনুসারে সাজানো:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// My top posts by number of stars
let myTopPostsQuery = ref.child("user-posts").child(getUid()).queryOrdered(byChild: "starCount")

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// My top posts by number of stars
FIRDatabaseQuery *myTopPostsQuery = [[[self.ref child:@"user-posts"]
                                      child:[super getUid]]
                                     queryOrderedByChild:@"starCount"];

এই ক্যোয়ারী ডাটাবেসের পাথ থেকে ব্যবহারকারীর পোস্টগুলি পুনরুদ্ধার করে তাদের ব্যবহারকারী আইডির উপর ভিত্তি করে, প্রতিটি পোস্টে প্রাপ্ত তারার সংখ্যা অনুসারে অর্ডার করা হয়। আইডিগুলিকে সূচক কী হিসাবে ব্যবহার করার এই কৌশলটিকে ডেটা ফ্যান আউট বলা হয়, আপনি এটি সম্পর্কে আরও পড়তে পারেন আপনার ডেটাবেসের কাঠামোতে

queryOrderedByChild পদ্ধতিতে কল করা ফলাফলের অর্ডার করার জন্য চাইল্ড কী নির্দিষ্ট করে। এই উদাহরণে, প্রতিটি পোস্টে "starCount" চাইল্ডের মান অনুসারে পোস্টগুলি সাজানো হয়েছে৷ আপনার কাছে এমন ডেটা থাকলে নেস্টেড বাচ্চাদের দ্বারাও কোয়েরি অর্ডার করা যেতে পারে:

"posts": {
  "ts-functions": {
    "metrics": {
      "views" : 1200000,
      "likes" : 251000,
      "shares": 1200,
    },
    "title" : "Why you should use TypeScript for writing Cloud Functions",
    "author": "Doug",
  },
  "android-arch-3": {
    "metrics": {
      "views" : 900000,
      "likes" : 117000,
      "shares": 144,
    },
    "title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)",
    "author": "Doug",
  }
},

এই ক্ষেত্রে, আমরা আমাদের queryOrderedByChild কলে নেস্টেড চাইল্ডের আপেক্ষিক পাথ নির্দিষ্ট করে metrics কী-এর অধীনে নেস্ট করা মান অনুসারে আমাদের তালিকার উপাদানগুলিকে অর্ডার করতে পারি।

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
 
let postsByMostPopular = ref.child("posts").queryOrdered(byChild: "metrics/views")

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
 
FIRDatabaseQuery *postsByMostPopular = [[ref child:@"posts"] queryOrderedByChild:@"metrics/views"];

অন্যান্য ডেটার ধরনগুলি কীভাবে অর্ডার করা হয় সে সম্পর্কে আরও তথ্যের জন্য, কীভাবে কোয়েরি ডেটা অর্ডার করা হয় তা দেখুন৷

ফিল্টারিং ডেটা

ডেটা ফিল্টার করার জন্য, আপনি একটি ক্যোয়ারী তৈরি করার সময় একটি অর্ডার-বাই পদ্ধতির সাথে সীমা বা পরিসরের যে কোনো পদ্ধতি একত্রিত করতে পারেন।

পদ্ধতি ব্যবহার
queryLimitedToFirst ফলাফলের অর্ডার করা তালিকার শুরু থেকে আইটেমের সর্বাধিক সংখ্যা সেট করে।
queryLimitedToLast ফলাফলের অর্ডারকৃত তালিকার শেষ থেকে ফেরার জন্য আইটেমের সর্বাধিক সংখ্যা সেট করে।
queryStartingAtValue ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় বা সমান আইটেমগুলি ফেরত দিন।
queryStartingAfterValue ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে বড় আইটেমগুলি ফেরত দিন।
queryEndingAtValue ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের থেকে কম বা সমান আইটেমগুলি ফেরত দিন।
queryEndingBeforeValue ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের চেয়ে কম আইটেমগুলি ফেরত দিন৷
queryEqualToValue ক্রম অনুসারে নির্বাচিত পদ্ধতির উপর নির্ভর করে নির্দিষ্ট কী বা মানের সমান আইটেমগুলি ফেরত দিন।

অর্ডার-বাই পদ্ধতির বিপরীতে, আপনি একাধিক সীমা বা পরিসর ফাংশন একত্রিত করতে পারেন। উদাহরণস্বরূপ, আপনি ফলাফলগুলিকে একটি নির্দিষ্ট মানের পরিসরে সীমাবদ্ধ করতে queryStartingAtValue এবং queryEndingAtValue পদ্ধতিগুলিকে একত্রিত করতে পারেন৷

ফলাফলের সংখ্যা সীমিত করুন

প্রদত্ত কলব্যাকের জন্য সর্বাধিক সংখ্যক শিশুকে সিঙ্ক করার জন্য আপনি queryLimitedToFirst এবং queryLimitedToLast পদ্ধতিগুলি ব্যবহার করতে পারেন৷ উদাহরণস্বরূপ, যদি আপনি 100-এর সীমা সেট করতে queryLimitedToFirst ব্যবহার করেন, আপনি প্রাথমিকভাবে শুধুমাত্র 100টি FIRDataEventTypeChildAdded কলব্যাক পাবেন। যদি আপনার ফায়ারবেস ডাটাবেসে 100 টিরও কম আইটেম সংরক্ষিত থাকে, তাহলে প্রতিটি আইটেমের জন্য একটি FIRDataEventTypeChildAdded কলব্যাক চালু হবে।

আইটেমগুলি পরিবর্তন হওয়ার সাথে সাথে, আপনি FIRDataEventTypeChildAdded কলব্যাকগুলি পাবেন যে আইটেমগুলি ক্যোয়ারী প্রবেশ করেছে এবং FIRDataEventTypeChildRemoved কলব্যাকগুলি যেগুলি থেকে বাদ পড়ে যায় যাতে মোট সংখ্যা 100-এ থাকে৷

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি উদাহরণ ব্লগিং অ্যাপ সমস্ত ব্যবহারকারীর 100টি সাম্প্রতিক পোস্টের একটি তালিকা পুনরুদ্ধার করতে পারে:

সুইফট

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// Last 100 posts, these are automatically the 100 most recent
// due to sorting by push() keys
let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))!

উদ্দেশ্য-C

দ্রষ্টব্য: এই Firebase পণ্যটি অ্যাপ ক্লিপ লক্ষ্যে উপলব্ধ নয়।
// Last 100 posts, these are automatically the 100 most recent
// due to sorting by push() keys
FIRDatabaseQuery *recentPostsQuery = [[self.ref child:@"posts"] queryLimitedToFirst:100];

কী বা মান দ্বারা ফিল্টার করুন

আপনি queryStartingAtValue , queryStartingAfterValue , queryEndingAtValue , queryEndingBeforeValue , এবং queryEqualToValue ব্যবহার করতে পারেন প্রশ্নগুলির জন্য নির্বিচারে শুরু, শেষ এবং সমতুল্য পয়েন্টগুলি বেছে নিতে। এটি ডেটা পেজিনেট করার জন্য বা শিশুদের সাথে আইটেম খুঁজে বের করার জন্য দরকারী হতে পারে যেগুলির একটি নির্দিষ্ট মান রয়েছে৷

কিভাবে কোয়েরি ডেটা অর্ডার করা হয়

এই বিভাগটি ব্যাখ্যা করে যে কিভাবে FIRDatabaseQuery ক্লাসের প্রতিটি ক্রম অনুসারে পদ্ধতি দ্বারা ডেটা সাজানো হয়।

queryOrderedByKey

আপনার ডেটা সাজানোর জন্য queryOrderedByKey ব্যবহার করার সময়, কী দ্বারা ডেটা ঊর্ধ্বমুখী ক্রমে ফেরত দেওয়া হয়।

  1. 32-বিট পূর্ণসংখ্যা হিসাবে পার্স করা যেতে পারে এমন একটি কী সহ বাচ্চারা প্রথমে আসে, আরোহী ক্রমে সাজানো হয়।
  2. একটি স্ট্রিং মান সহ বাচ্চারা তাদের কী হিসাবে পরবর্তী আসে, লেক্সিকোগ্রাফিকভাবে আরোহী ক্রমে সাজানো হয়।

queryOrderedByValue

queryOrderedByValue ব্যবহার করার সময়, বাচ্চাদের তাদের মান অনুসারে অর্ডার করা হয়। অর্ডার করার মানদণ্ড queryOrderedByChild এর মতোই, নোডের মানটি একটি নির্দিষ্ট চাইল্ড কী-এর মানের পরিবর্তে ব্যবহার করা ছাড়া।

queryOrderedByChild

queryOrderedByChild ব্যবহার করার সময়, নির্দিষ্ট চাইল্ড কী ধারণ করা ডেটা নিম্নরূপ সাজানো হয়:

  1. নির্দিষ্ট চাইল্ড কী-এর জন্য একটি nil মান সহ শিশুরা প্রথমে আসে।
  2. নির্দিষ্ট চাইল্ড কী-এর জন্য false এর মান সহ শিশু পরবর্তী আসে। যদি একাধিক শিশুর false মান থাকে, তাহলে সেগুলোকে কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  3. নির্দিষ্ট চাইল্ড কী-এর জন্য true মান সহ শিশু পরবর্তী আসে। যদি একাধিক বাচ্চাদের true মান থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে সাজানো হয়।
  4. একটি সাংখ্যিক মান সহ বাচ্চারা পরবর্তীতে আসে, আরোহী ক্রমে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার সংখ্যাগত মান একই থাকে, তবে সেগুলি কী দ্বারা বাছাই করা হয়।
  5. স্ট্রিংগুলি সংখ্যার পরে আসে এবং আভিধানিকভাবে ঊর্ধ্বক্রম অনুসারে সাজানো হয়। যদি নির্দিষ্ট চাইল্ড নোডের জন্য একাধিক বাচ্চার মান একই থাকে, তবে সেগুলি কী দ্বারা অভিধানিকভাবে অর্ডার করা হয়।
  6. অবজেক্টগুলি শেষের দিকে আসে এবং ঊর্ধ্বক্রম অনুসারে কী দ্বারা অভিধানিকভাবে সাজানো হয়।

শ্রোতাদের বিচ্ছিন্ন করুন

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

আপনি যখন একটি রেফারেন্সে একটি কলব্যাক ব্লক যোগ করেন, একটি FIRDatabaseHandle ফেরত দেওয়া হয়। এই হ্যান্ডেলগুলি কলব্যাক ব্লক অপসারণ করতে ব্যবহার করা যেতে পারে।

যদি একটি ডাটাবেস রেফারেন্সে একাধিক শ্রোতা যোগ করা হয়, একটি ইভেন্ট উত্থাপিত হলে প্রতিটি শ্রোতাকে ডাকা হয়। সেই অবস্থানে ডেটা সিঙ্ক করা বন্ধ করার জন্য, আপনাকে removeAllObservers পদ্ধতিতে কল করে একটি অবস্থানের সমস্ত পর্যবেক্ষককে সরিয়ে ফেলতে হবে।

removeObserverWithHandle বা removeAllObservers শ্রোতার উপর কল করা স্বয়ংক্রিয়ভাবে তার চাইল্ড নোডে নিবন্ধিত শ্রোতাদের সরিয়ে দেয় না; সেগুলি সরানোর জন্য আপনাকে অবশ্যই সেই রেফারেন্স বা হ্যান্ডেলগুলির ট্র্যাক রাখতে হবে।

পরবর্তী পদক্ষেপ