অ্যাপল ডকুমেন্টেশনের একটি দুর্দান্ত উদাহরণ রয়েছে যা এমন পরিস্থিতির প্রস্তাব দেয় যেখানে বিপরীত সম্পর্ক না রেখেই আপনার সমস্যা হতে পারে। এই ক্ষেত্রে এটি মানচিত্র করা যাক।
ধরে নিন আপনি নীচে এটি মডেল করেছেন:
উল্লেখ্য আপনি যদি একটি আছে টু-এক "বলা সম্পর্ক টাইপ " থেকে SocialApp
থেকে SocialAppType
। সম্পর্কটি অ-alচ্ছিক এবং এতে একটি "অস্বীকার" মোছার নিয়ম রয়েছে ।
এখন নিম্নলিখিত বিবেচনা করুন:
SocialApp *socialApp;
SocialAppType *appType;
// assume entity instances correctly instantiated
[socialApp setSocialAppType:appType];
[managedObjectContext deleteObject:appType];
BOOL saved = [managedObjectContext save:&error];
সম্পর্কটি nonচ্ছিক না হওয়াতে আমরা মুছে ফেলার নিয়মটিকে অস্বীকার হিসাবে সেট করেছি বলে আমরা এই প্রেক্ষাপটটি ব্যর্থ হব তা প্রত্যাশা করি।
কিন্তু এখানে সংরক্ষণ সফল হয়।
কারণটি হ'ল আমরা কোনও বিপরীত সম্পর্ক সেট করি নি । তার কারণে, অ্যাপ্লিকেশনটি মুছে ফেলা হলে সোশ্যাল অ্যাপ্লিকেশন উদাহরণটি পরিবর্তিত হিসাবে চিহ্নিত হয় না। সুতরাং সংরক্ষণের আগে সোস্যাল অ্যাপের জন্য কোনও বৈধতা ঘটে না (কোনও পরিবর্তন ঘটে নি বলে এটি কোনও বৈধতার প্রয়োজন বলে ধরে নেয়)। কিন্তু আসলে একটি পরিবর্তন ঘটেছিল। কিন্তু এটি প্রতিফলিত হয় না।
আমরা যদি অ্যাপটি টাইপ করে মনে করি
SocialAppType *appType = [socialApp socialAppType];
অ্যাপ টাইপ শূন্য হয়।
অদ্ভুত, তাই না? আমরা একটি অ-alচ্ছিক বৈশিষ্ট্যের জন্য নিলাম পেতে?
সুতরাং যদি আপনি বিপরীত সম্পর্ক স্থাপন করে থাকেন তবে আপনি কোনও সমস্যায় পড়বেন না। অন্যথায় আপনাকে নীচে কোড লিখে জোর করে যাচাই করতে হবে।
SocialApp *socialApp;
SocialAppType *appType;
// assume entity instances correctly instantiated
[socialApp setSocialAppType:appType];
[managedObjectContext deleteObject:appType];
[socialApp setValue:nil forKey:@"socialAppType"]
BOOL saved = [managedObjectContext save:&error];