سؤال

أحاول الحصول على بيانات مترجمة من طراز بيانات أساسي. رمز بلدي:

NSEntityDescription *entityDescription = [NSEntityDescription entityForName: entityDescriptionValue
                                                     inManagedObjectContext: context];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: entityDescription];

[fetchRequest setPredicate: predicate];

NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey: @"name" ascending: YES selector: @selector(localizedCompare:)];
[fetchRequest setSortDescriptors: [NSArray arrayWithObject: sortBy]];
[sortBy release];

ولكن، عندما أحصل على الكائنات، ما زالوا يتم فرزهم بالقيم الأصلية (البيانات غير المترجمة).

ما أنا لا أفعله بشكل صحيح؟

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

المحلول

كيف تحصل على المترجمة names من كيان Coredata؟ انها ليست التي localizedCompare: يسترد بطريقة سحرية النسخة المترجمة من السلاسل ومقارنتها. بدلا من ذلك، يستخدم أوامر الفرز المترجمة إلى نفس السلاسل. نسخة مرتبة من صفيف تحتوي على @"England", @"France", @"Germany" سيكون هو نفسه في أي بلد ... لا تحتوي على أي شخصيات معلمة أو أيا كان. نتائج localizedCompare: يمكن تغيير فقط عندما تستخدم لغتين ترتيب فرز مختلف بين الحروف.

إذا كنت ترغب في استرداد شيء من Localizable.strings بناء على خاصية كيانات Coredata، تحتاج إلى القيام بذلك يدويا. لن تتعامل SQLite Backend of Coredata التعامل مع ذلك على مستوى طلبات الجلب. لذلك تحتاج أولا جلب الإدخالات في NSArray, ، ثم تحتاج إلى فرزها باستخدام sortedArrayUsing...: من خلال تمرير طريقة تسترجع الأسماء المترجمة NSLocalizedString ويقارنها.

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