عدد صحيح ل NSInteger وحفظها في البيانات الأساسية

لدي عدد صحيح اسمه الرخام ، وأنا أحاول حفظه في صفيف باستخدام التعليمات البرمجية التالية:

[records setValue:marbles forKey:@"marbles"];

بهذا الرمز ، أحصل على التحذير:

تحذير: المشكلة الدلالية: عدد صحيح غير متوافق لتحويل المؤشر يرسل 'int' إلى المعلمة من النوع 'id'

لذا ، كيف يمكنني تعيين قيمة NSInteger.

السؤال التالي ، كيف يمكن إعادة تحميل المصفوفة إلى بيانات أساسية؟ أحضر المصفوفة وأجري التغييرات ، وكيف يمكنني تطبيق تلك التغييرات مرة أخرى على Core Data؟

شكر

4

3 إجابة

تهيئة NSNumber (وهو ما تتوقعه CoreData) باستخدام العدد الصحيح:

NSNumber *marbleNumber = [NSNumber numberWithInt:marbles];
[records setObject:marbleNumber [email protected]"marbles"];

أو:

[records setMarbles:[NSNumber numberWithInt:marbles]];

لاستمرار التغييرات ، يمكنك حفظ السياق الخاص بك:

NSError *error;
[myManagedObjectContext save:&error];

//handle your error
14
وأضاف

سوف تأخذ NSArrays الكائنات فقط ، لذا فإن الخطوة الأولى هي تحويل NSInteger إلى NSNumber باستخدام هذه الطريقة:

+ (NSNumber *)numberWithInt:(int)value

وبالتالي:

NSNumber *myNumber = [NSNumber numberWithInt:marbles];

ثم يمكنك القيام بما يلي:

[records setValue:myNumber forKey:@"marbles"];

بمجرد أن تقوم بجلب البيانات ، فإنك تحصل على ملف managedObjectContext ، فكر فيه كوحة رسم ، وأي تغييرات (بما في ذلك إضافة أو حذف كائنات جديدة) ، يمكنك حفظها إلى هذه الكائنات مرة أخرى إلى CoreData باستخدام شيء كهذا:

NSError *error;
        if (![context save:&error]) {
           //Update to handle the error appropriately.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            exit(-1); //Fail
        }

حيث السياق هو السياق الذي ستحصل عليه مع NSFetchedResultsController. التي يمكنك الحصول عليها من هذا القبيل:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];

I would recommend taking a look at the Core Data programming guide

6
وأضاف
- (id)primitiveValueForKey:(NSString *)key;    
- (void)setPrimitiveValue:(id)value forKey:(NSString *)key;

استخدم NSNumber بدلاً من القيمة (id)

0
وأضاف