ترميز كتلة الهدف-C؟
-
24-09-2019 - |
سؤال
هل من الممكن تشفير كتلة الهدف-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.