سؤال

هل من الممكن تشفير كتلة الهدف-C مع NSKeyedArchiver?

لا أعتقد أن كائن كتلة هو NSCoding-التوافق ، لذلك [coder encodeObject:block forKey:@"block"] لا يعمل؟

أيه أفكار؟

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

المحلول

لا ، هذا غير ممكن لمجموعة متنوعة من الأسباب. لا يتم تمثيل البيانات الموجودة داخل كتلة بأي شكل من الأشكال ، على سبيل المثال ، متغيرات المثيل. لا يوجد مخزون للدولة ، وبالتالي ، لا توجد طريقة لتعداد الدولة لأغراض الأرشيف.

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

قد تجد الإجابة على هذا سؤال مثير للاهتمام. هو ذات الصلة.


للتوسع ، قل أن لديك فصلًا مثل:

@interface MyData:NSObject
{
    ... ivars representing work to be done in block
}

- (void) doYourMagicMan;
@end

ثم يمكنك:

MyData *myWorkUnit = [MyData new];

... set up myWorkUnit here ...

[something doSomethingWithBlockCallback: ^{ [myWorkUnit doYourMagicMan]; }];

[myWorkUnit release]; // the block will retain it (callback *must* Block_copy() the block)

من هناك ، يمكنك تنفيذ الأرشفة على MyData ، وإنقاذها بعيدًا ، وما إلى ذلك ... المفتاح هو التعامل مع الكتلة كمشغل للقيام بالحساب وتغليف الحساب المذكور والحالة اللازمة للحساب في مثيل فئة MyData.

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