objective-c - الكاكاو البيانات الأساسية وسيلة فعالة لحساب الكيانات




core-data (8)

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

لذا ، يجب أن يكون الرمز على النحو التالي:

int entityCount = 0;
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:_managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setIncludesPropertyValues:NO];
[fetchRequest setIncludesSubentities:NO];
NSError *error = nil;
NSUInteger count = [_managedObjectContext countForFetchRequest: fetchRequest error: &error];
if(error == nil){
    entityCount = count;
}

آمل أن يساعد.

لقد قرأت الكثير عن Core Data .. ولكن ما هي الطريقة الفعالة لعمل عدد من نوع Entity-Type (مثل ما يمكن لـ SQL فعله مع عدد SELECT (1) ...). الآن أنا فقط حل هذه المهمة مع اختيار كل مع NSFetchedResultsController والحصول على عدد من NSArray ! أنا متأكد من أن هذه ليست الطريقة المثلى ...


أعتقد أن الطريقة الأسهل والأكثر فاعلية لحساب الكائنات هي تعيين نوع النتيجة NSCountResultType إلى NSCountResultType وتنفيذها مع NSManagedObjectContext countForFetchRequest:error: method.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:entityName];
fetchRequest.resultType = NSCountResultType;
NSError *fetchError = nil;
NSUInteger itemsCount = [managedObjectContext countForFetchRequest:fetchRequest error:&fetchError];
if (itemsCount == NSNotFound) {
    NSLog(@"Fetch error: %@", fetchError);
}

// use itemsCount

سريع

من السهل نسبياً الحصول على إجمالي عدد حالات الكيان في Core Data:

let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
let count = context.countForFetchRequest(fetchRequest, error: nil)

اختبرت هذا في جهاز محاكاة مع عدد وجوه 400،000+ والنتيجة كانت سريعة إلى حد ما (وإن لم تكن لحظية).


لكي تكون واضحًا ، فأنت لا تحسب الكيانات ، ولكن في حالات كيان معين. (لحساب عدد الوحدات فعليًا ، اطلب نموذج الكائن المُدار لعدد وحداتها).

لحساب جميع مثيلات كيان معين دون جلب جميع البيانات ، استخدم -countForFetchRequest:

فمثلا:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity: [NSEntityDescription entityForName: entityName inManagedObjectContext: context]];

NSError *error = nil;
NSUInteger count = [context countForFetchRequest: request error: &error];

[request release];

return count;

لا أعرف ما إذا كان استخدام NSFetchedResultsController هو الطريقة الأكثر فعالية لتحقيق هدفك (ولكنه قد يكون). رمز صريح للحصول على عدد مثيلات الكيان هو أدناه:

// assuming NSManagedObjectContext *moc

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:moc]];

[request setIncludesSubentities:NO]; //Omit subentities. Default is YES (i.e. include subentities)

NSError *err;
NSUInteger count = [moc countForFetchRequest:request error:&err];
if(count == NSNotFound) {
  //Handle error
}

[request release];

كتبت طريقة فائدة بسيطة لـ Swift 3 لجلب عدد الكائنات.

static func fetchCountFor(entityName: String, predicate: NSPredicate, onMoc moc: NSManagedObjectContext) -> Int {

    var count: Int = 0

    moc.performAndWait {

        let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)
        fetchRequest.predicate = predicate
        fetchRequest.resultType = NSFetchRequestResultType.countResultType

        do {
            count = try moc.count(for: fetchRequest)
        } catch {
            //Assert or handle exception gracefully
        }

    }

    return count
}

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

NSError *err;
NSUInteger count = [context countForFetchRequest:fetch error:&err];

if(count > 0) {
NSLog(@"EXIST"); 
} else {
NSLog(@"NOT exist");
}

كما ذكر العديد من الناس بالفعل ، فإن developer.apple.com/mac/library/documentation/Cocoa/Conceptual/… آبل developer.apple.com/mac/library/documentation/Cocoa/Conceptual/… هي أفضل مكان للبدء.

رابط مفيد واحد لم أره بعد هو developer.apple.com/mac/library/documentation/Cocoa/Conceptual/… . ستجدها في وسط مستندات Apple إذا قرأت عنها ، ولكن الأمر يستحق الربط المباشر. إنه ملخص تنفيذي رائع لقواعد إدارة الذاكرة مع أمثلة وأخطاء شائعة (بشكل أساسي ما تحاول الإجابة عليه هنا ، ولكن ليس كذلك).





objective-c core-data