الحصول على القيم وإعدادها من عناصر البيانات الأساسية في الهدف - ج؟

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

سؤال

لدي تطبيق بسيط مع كيانين:

شخص:

Attributes:
    name
Relationships:
    nativeLanguage: (<<-> Language.natives)
    nonNativeLanguage: (<<-> Language.nonNatives)

لغة:

Attributes:
    name
Relationships:
    natives: (<->> Person.nativeLanguage)
    nonNatives: (<->> Person.nonNativeLanguage)

على شاشة تحرير الأشخاص، لدي شاشة عرض طاولة لإدراج اللغات غير الأصلية المدرجة للشخص، إلى جانب مربع إسقاط بالنسبة لهم لاختيار لغة أخرى وزر لإضافة اللغة الجديدة إلى القائمة.

هدفي هو إنشاء وظيفة كما يلي:

- (IBAction)addNonNativeLanguage:(id)sender {
    // tack the language to the end of the list on a many-many relationship
    PersonEntry.nonNativeLanaguages = PersonEntry.nonNativeLanguages + sender;
}

وإرفاق الإجراء إلى الزر. هناك خدعة، في حين أعرف كيفية تعيين وتعديل المتغيرات العادية، ليس لدي أي فكرة عن كيفية تعديل محتويات البيانات الأساسية خارج باني واجهة. كيف يمكنني أن أفعل ذلك في الهدف - ج؟

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

المحلول

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

- (void)addNatives:(NSSet*)value_ {
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
    [[self primitiveValueForKey:@"natives"] unionSet:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:value_];
}

-(void)removeNatives:(NSSet*)value_ {
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
    [[self primitiveValueForKey:@"natives"] minusSet:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:value_];
}

- (void)addNativesObject:(Person*)value_ {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"natives"] addObject:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (void)removeNativesObject:(Person*)value_ {
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value_ count:1];
    [self willChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [[self primitiveValueForKey:@"natives"] removeObject:value_];
    [self didChangeValueForKey:@"natives" withSetMutation:NSKeyValueMinusSetMutation usingObjects:changedObjects];
    [changedObjects release];
}

- (NSMutableSet*)nativesSet {
    [self willAccessValueForKey:@"natives"];
    NSMutableSet *result = [self mutableSetValueForKey:@"natives"];
    [self didAccessValueForKey:@"natives"];
    return result;
}

هذا رمز القالب هو من الذئب rentzsch ممتاز جدا mogenerator (والتي تولدها تلقائيا بشكل مناسب عند كل حفظ نموذج البيانات).

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

نصائح أخرى

سيتعين عليك أولا العثور على مثيل / سجل ManagedBject الذي تريده. الطريقة السريعة والقذرة هي أن نسأل عنصر الواجهة التي تعرض كائن الشخص الذي يعترض عليه.

بمجرد أن يكون لديك الكائن الذي تستخدمه mutableSetValueForKey: مع اسم العلاقة. هذا يمنحك مجموعة قابلة للتغيير من جميع Languges ذات الصلة. ثم جلب كائن اللغة المناسبة وإضافته إلى المجموعة باستخدام أساليب NSMutableset القياسية.

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