الكيان XXX ليس متوافقا مع ترميز القيمة الرئيسية للمفتاح "(null)"

StackOverflow https://stackoverflow.com/questions/1843330

سؤال

أحاول كتابة محرر عرض طاولة بسيطة لكيان بيانات أساسي. لسوء الحظ أنا في مشاكل.

يحدث الخطأ عند إضافة الكيان الأول جدا إلى الجدول. تتمثل عملية إحضار مربع الحوار المشروط على النحو التالي:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Group" inManagedObjectContext:context];
    insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
NSManagedObject *newManagedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

NameEditController *dialog = [[NameEditController alloc] init];
dialog.managedObject = newManagedObject;
[newManagedObject release];

UINavigationController *navCtrlr = [[UINavigationController alloc] initWithRootViewController:dialog];
navCtrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[[self navigationController] presentModalViewController: navCtrlr animated:YES];    
[navCtrlr release];

بداخل NameEditController, ، لدي هذا بعد الضغط على زر القيام به:

NSString* name = self.nameLabel.text;
[self.managedObject setValue:name forKey:@"name"];

NSError *error = nil;
if (![managedObject.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
UIViewController *ctrl = [self parentViewController];
[ctrl dismissModalViewControllerAnimated:YES];

في المرة الأولى التي أتيط بها كائن (عندما تكون القائمة فارغة) أحصل على هذا:

تم القبض على استثناء أثناء معالجة تغيير البيانات الأساسية: [ValueForundefinTKey:]: مجموعة الكيان ليست متوافقة مع ترميز القيمة الرئيسية للمفتاح "(NULL)".

إذا قمت بملء حقل "الاسم" قبل إحضار مربع الحوار، فأنا قادر على إضافة الكيان الأول بنجاح:

newmanagedobject setvalue: @ "مجموعة جديدة" الفوركي: @ "الاسم"]؛ // هذا يعمل

انا استخدم NSFetchedResultsController لإدارة عرض الجدول BTW.

شكرا!

هل كانت مفيدة؟

المحلول 2

Yarr ... آسف الرجال، كان في الواقع في بلدي didChangeObject:atIndexPath:forChangeType:newIndexPath: وظيفة نسخ على عجل من مكان آخر. يبدو أنه استثناء يتم إلقاؤه هنا يمكن أن يحجب داخل save: طريقة.

نصائح أخرى

في كتلة التعليمات البرمجية الأولى، يبدو أن السطر الثالث من التعليمات البرمجية خارج السياق. لست متأكدا مما إذا كان هناك شيء قد يساهم به.

ثانيا، أسهل طريقة للحصول على نفسك nsmanagedobject في nsmanagedobjectxontext من اسم الكيان هو استخدام [NSentityDescription InsertNewObjectornameName: InmanagedObjectContext:] محدد.

لذلك، سأفعل شيئا مثل:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityName:@"Group" inManagedObjectContext:context];

لن تحتاج إلى الإفراج عن NewObject بعد الآن، نظرا لأن [NSentityDescription InsertNewObjectorNameName: InmanagedObjectContext:] سيعود محدد أحد كائن مع عدد الاحتياجات من 0. أيضا، تأكد من أن لديك اسم NoteDitController يحدد خاصية ManagedObject كما الاحتفاظ بها.

لمعالجة مشكلتك الفعلية، يبدو أنها ربما لديك "اسم" محددة كخاصية مطلوبة في نموذج البيانات الخاص بك؟ لقطة شاشة تعرض تفاصيل "الاسم" في طراز البيانات الخاص بك سيساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top