নির্দিষ্ট অবজেক্ট আইডি থেকে কীভাবে কোর ডেটা অবজেক্ট পাবেন?


120

নিম্নলিখিত কোডগুলি ব্যবহার করে আমি সহজেই কোর ডেটাতে কোনও অবজেক্টের আইডি পেতে পারি:

NSManagedObjectID *moID = [managedObject objectID];

তবে, কোনও নির্দিষ্ট অবজেক্ট আইডি দিয়ে কোনও কী কী মূল ডেটা স্টোর থেকে বেরিয়ে আসার উপায় আছে? আমি জানি যে আমি এটির মতো এনএসএফচেকেরওয়েস্ট ব্যবহার করে এটি করতে পারি:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];

তবে, আমি এটি এমনভাবে করতে চাই যাতে এটি তার নিজস্ব আনার অনুরোধ না করে। কোন ধারনা?


তবে আনার অনুরোধের পদ্ধতিতে আপনি বৈশিষ্ট্য বা সম্পর্কগুলি প্রাক-আনতে সেট করতে পারেন যা আপনি জিনিসগুলিতে অ্যাক্সেস করার সাথে সাথে আরও অনেক প্রশ্নের চেয়ে দুর্দান্ত দক্ষতা দেবেন।
মলহাল

উত্তর:


208

তুমি চাও:

-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
                                   error:(NSError **)error

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

(সচেতন থাকুন: এনএসম্যানেজডঅবজেক্ট কনটেক্সটে দুটি পদ্ধতি রয়েছে যা একই রকম দেখতে মনে হয় যা আমাকে ছড়িয়ে দিয়েছে। এগুলি সোজা রাখতে সহায়তা করার জন্য, অন্য দু'জন এখানে যা করেছেন:

-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID

..., প্রদত্ত অবজেক্ট-সঙ্গে একটি ফল্ট বস্তুর তৈরি করবে থাকুক বা না থাকুক যেমন একটি বস্তু আসলে দোকান বিদ্যমান। যদি এটি বিদ্যমান না থাকে, ত্রুটিটিকে আগুন ধরিয়ে দেয় এমন কোনও কিছুই ব্যর্থ হবে যদি না আপনি এনএসম্যানেজডঅবজেক্ট কনটেক্সট এর সাহায্যে অবজেক্টটি প্রথমে প্রবেশ না করেন insertObject:। এর জন্য আমি কেবলমাত্র ব্যবহারের সন্ধান পেয়েছি হ'ল অবজেক্টআইডি সংরক্ষণের সময় স্টোর থেকে স্টোর থেকে অবজেক্টগুলি অনুলিপি করা।

-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID

... এই পরিচালিত অবজেক্ট কনটেক্সট দ্বারা স্টোর থেকে এনে নেওয়া হলে সেই আইডি থাকা অবজেক্টটি ফিরিয়ে দেবে। এই পদ্ধতিটি কোনটির জন্য দরকারী তা যদি কেউ জানেন তবে মন্তব্য করুন))

[এবং: প্রথম পদ্ধতি এবং অন্যান্য দুটি মধ্যে আরেকটি গুরুত্বপূর্ণ পার্থক্য হ'ল existingObjectWithID:error:কখনই ত্রুটি দেয় না; এটি সর্বদা আপনার জন্য পুরো বস্তুটি নিয়ে আসে। যদি আপনি এটি এড়াতে চেষ্টা করছেন (উদাঃ একটি বড় অঙ্কুরের সম্পত্তি সহ একটি ব্যয়বহুল থেকে টেনে আনার বস্তুর সাথে কাজ করা), আপনাকে চালাক হতে হবে objectWithID:বা objectRegisteredForID:, যা ফল্টগুলিতে আগুন দেয় না; বা সঠিকভাবে কনফিগার করা আনার অনুরোধটি ব্যবহার করুন]]


11
-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectIDসম্ভবত কার্যকর যখন আপনি কেবল দেখতে চান যে কোনও বস্তু ইতিমধ্যে প্রসঙ্গে উপস্থিত রয়েছে এবং এটি আনতে চান না।
টনি

আমার অধিবেশন। উপর -tableView:didSelectRowAtIndexPath: UIAlertView হ্যাঁ সঙ্গে / না প্রদর্শিত হয়। "হ্যাঁ" - অবজেক্টের সাথে কিছু কাজ আছে। আমি NSFetchedResultsControllerরিমোট থেকে + ব্যাকগ্রাউন্ড কোরডেটা আপডেট ব্যবহার করি । সুতরাং আমি বস্তুটি সঞ্চয় করতে পারি না: সতর্কতা যখন স্ক্রিনে থাকে তখন স্টোরেজ আপডেট করা যায় এবং অবজেক্ট সরানো যায়। আমি অবজেক্টআইডি সঞ্চয় করি, তারপরে আবার সতর্কতার প্রতিনিধি হিসাবে এটি পুনরুদ্ধার করি। কারণ আমি ব্যবহার করি NSFetchedResultsController- সমস্ত প্রয়োজনীয় বস্তু ইতিমধ্যে এই মুহুর্তের প্রসঙ্গে। তদ্ব্যতীত, যখন প্রসঙ্গে কোনও বস্তু নেই, কোরিডাটা অকেজো আনার চেষ্টা করা উচিত নয়।
কেপওয়ার

সুন্দর উত্তর, ধন্যবাদ! এই পদ্ধতির নামগুলি সত্যই কৌশলযুক্ত।
ভুলটির

দুর্দান্ত উত্তর, সম্পর্কে স্পষ্টতার জন্য ধন্যবাদ objectWithId:- insertObjectএকটি দোষ অপসারণের চেষ্টা ব্যতিক্রম বৃদ্ধি রোধ করার জন্য প্রথমে কল করার প্রয়োজনটি আমার কাছে প্রকৃতপক্ষে অস্বীকারকারী ছিল।
স্ট্যানিস্লাভ পাঙ্কেভিচ

3
objectRegisteredForID:যখন অন্য প্রসঙ্গে কোনও অপারেশন থেকে অবজেক্টআইডিগুলির একটি তালিকা উপস্থিত থাকে তখন আপনি কার্যকর হন এবং আপনি কেবল সেই স্থানীয় আপডেটে বাসি ডেটা থাকতে পারে এমন আপডেট করতে চান। এটি আপনার অবজেক্টের গ্রাফ (এবং সেইজন্য মেমরির ব্যবহার) -registeredObjectsচেক করে রাখে এবং আপনার প্রসঙ্গের জন্য কোনও বস্তু ত্রুটিযুক্ত কিনা তা দেখার জন্য অবজেক্ট আইডিগুলি লুপিং করা এবং পরীক্ষা করা ভাল ।
স্টার্লিং আর্চার 18

4

objectWithID:আপনি যে পদ্ধতিটি সন্ধান করছেন তা হ'ল এবং এটি এটি করার প্রস্তাব দেওয়া উপায়। objectWithID:এটি করার অন্যান্য কয়েকটি পদ্ধতির বিপরীতে কেবলমাত্র প্রয়োজনীয় স্তরটিকে টানতে দক্ষতার সাথে NSManagedObjectContext ব্যবহার করবে। objectWithID:ব্যাকিং স্টোরেজে যাওয়ার আগে পিতা-মাতৃ প্রসঙ্গে, অবিরাম স্টোরের সমন্বয়কারী এবং ধ্রুবক স্টোর নিজে থেকেই মেমরির তথ্য সঠিকভাবে ব্যবহার করবে।

এটি ডাব্লুডাব্লুডিসি 2012 সেশনের "কোর ডেটার সেরা অভ্যাসগুলি" গভীরতার সাথে আবৃত ।


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