سؤال

وحاولت فقط compileing بلدي التطبيق فون ضد OS 3.0 وأحصل على خطأ ترجمة عند استخدام تعداد سريع.

وأنا أحاول أن تذهب من خلال NSArray الطبقات التي تحتوي على cComment:

for (cComment* newComment in comments.comments)

وأحصل على هذا الخطأ

والخطأ: نوع من استرجاع لا يتطابق مع نوع من "تعليقات" الملكية

وهذا يعمل لا تشوبه شائبة عند التحويل البرمجي مع OS 2.2.1.

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

for (id commentObject in comments.comments)
{
     cComment *newComment = (cComment *)commentObject;
}

ويمكن لأي شخص أن يفكر في طريقة أخرى؟ لماذا لم يتغير هذا؟ سيكون موضع تقدير أي نقاط وثائق التفاح حول هذا التغيير.

وتحرير

وبعد اقتراح Grouchal حاولت هذه:     NSArray * allComments = comments.comments وحصلت على نفس الخطأ لذلك يبدو وليس حول التعداد بعد كل شيء

وهنا صيغة التعليمات البرمجية ملف الرأس:

وNSMutableArray * التعليق؛

وproperty (للقراءة فقط، nonatomic) NSArray * التعليق؛

ويتم تصنيعه الممتلكات في ملف التنفيذ.

وتغيير الخاصية إلى NSMutableArray يبدو أن حل المشكلة ولكن لا أرى أي سبب لهذا ينبغي أن يكون عليه الحال. أي أفكار.

وشكرا.

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

المحلول 3

وانا ذاهب لإغلاق هذا السؤال وطلب واحدة جديدة في ظل التغيرات الهدف-ج ل iPhone OS 3.0.

وأنا نفذت طريقة جالبة نفسي لإرجاع NSArray، وأنه يعمل على ما يرام. تغيير أيضا الخاصية إلى NSMutableArray يعمل ولكنه في الواقع ليس ما أريد القيام به.

وليس لدي أي فكرة لماذا تغير هذا. هذا هو التغيير هدف-ج وليس تغيير نظام التشغيل. أيضا لا يوجد أي ذكر لها في وثائق من التغييرات بين 2.2 API 3.0 API.

وشكرا للجميع للاستجابة.

نصائح أخرى

والمشكلة هي في تعريف الممتلكات. يجب تغيير يكون ذلك على النحو التالي:

و@property (readonly,nonatomic) NSMutableArray* comments

وعلى الجانب السلبي، سوف يتعرض مجموعة الخاص بك كما قابلة للتغيير (على الرغم من أنني أفترض أن هذا ما أردت منع).

وأنا لا أرى أي سبب لماذا يجب أن هذا الرمز لا تعمل في OS 3.0 لدي رمز مشابهة تعمل بالفعل.

وماذا يحدث إذا قمت بتغيير الرمز إلى

NSArray *commentArray = comments.comments;
for (cComment *newComment in commentArray){
.....
}

ولقد لاحظت تماما كما كنت قد كتبت هذا حيث * هو في التعليمات البرمجية - هل هذا هو المشكلة؟ ينبغي أن يكون حقا cComment * في لإعلان؟

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