سؤال

على كيان البيانات الأساسي الخاص بي ، "كتاب" لدي خاصية منطقية ، "تم عرض" (NSNumber NumberWithBool) الذي يخبرني إذا كان الكتاب "تم عرضه".

أود تنفيذ نوع من "إعادة تعيين" هذه الخاصية لجميع كتاب NSManagedObjects الخاص بي. حتى أتمكن من ضبطهم جميعًا على لا بين الجلسات. أستخدم nspredicate لاسترداد جميع الكتب مثل هذا:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"wasViewed == %@", [NSNumber numberWithBool:YES]];

// code for setting entity, request etc...

NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease];

ومع ذلك ، فإن هذا يعمل بشكل جيد الآن ، أنا الآن بحاجة إلى إعداد حلقة ، والذهاب من خلال كل كائن كتاب ، شيء من هذا القبيل:

for(Book *b in mutableFetchResults) {

    [b setWasViewed:NO]
}

هل هناك طريقة لإجراء إجراء على كل عنصر يناسب المسند بدلاً من استرداده؟ لذلك بدلا من executeFetchRequest على managedObjectContext يمكن ان تكونexecuteOperationOnFetchRequestResults او هناك شيء ما على طول هذه الخطوط.

شكرا على أي مدخلات معطى :)

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

المحلول

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

[mutableFetchResults makeObjectsPerformSelector:@sel(setWasViewed:) withObject:[NSNumber numberWithBool:NO]];

يمكنك أيضًا تغيير سمة "wasviewed" إلى شيء مثل "LastViewed" وهو NSDATE. بدلاً من وضع علامة على الكتاب كما تم عرضه ، يمكنك ببساطة تحديث "LastViewed" إلى الوقت الحالي. يمكنك بعد ذلك تحديد ما إذا كان قد تم عرض كتاب في الجلسة الحالية من خلال التحقق مما إذا كان وقت آخر مقابلة للكتب "أكبر من وقت بدء الجلسة.

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