آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

EXC_BAD_INSTRUCTION در دیتابیس sqlite برای ورژن 3 و 4 swift

hamidptb  8 سال پیش  8 سال پیش
0 0

سلام من یک پروژه ای داشتم که داخلش از دیتابیس sqlite استفاده میکردم و اون رو با xcode 7  , swift 2 توسعه داده بودم ولی مثل اینکه ورژن جدید دیتابیس sqlite که برای swift 3 , 4 داخل گیتهاب آقای کاشی زاده قرار داره دچار مشکل هستش . و اون مشکلی که من بهش برخوردم اینه که بعضی از اطلاعات داخل جدول sqlite که از نوع TEXT هستش رو بیرون نمیکشه و موقع اجرای برنامه خطای زیر رو به من میده (خط 281) 

البته بعضی از TEXT های داخل جدول رو بیرون نمیکشه که تو ورژن قبلی که برای swift 2 بود این مشکل وجود نداشت و تقریبا مطمئنم که مشکل از کتابخونه ی دیتابیس هستش ، چون وقتی اون TEXT هایی رو که بدون مشکل واکشی میکنه رو داخل سطر های دیگه جدول قرار دادم و برنامه رو اجرا کردم بدون مشکل اجرا شد ولی با TEXT های دیگه مشکل داره و موقع اجرای برنامه به من خطا میده

ممنون میشم اگه دوستان و آقای کاشی زاده کمک کنن که بتونم این مشکل رو برطرف کنم .

البته این مشکل قبلا هم در انجمن مطرح شده لینک ولی پاسخ درستی براش ذکر نشده بود

0 0
یک مورد دیگه هم اینکه مثل همون نظری که یکی از دوستان در تاپیکی که لینکش رو گذاشتم داده بود تابع executeChange اصلا قابل دسترس نیست در ورژن جدید کتابخونه sqlite و فکر میکنم مثل ورژن 2 قابل استفاده نیست (8 سال پیش)
0 0
و این احتمال رو هم میدم که شاید خطای به وجود اومده به خاطر همین استفاده نکردن از executeChange هستش و من در موقع کانورت پروژه به swift 4 همه ی execute ها رو چه executeChange و چه executeQuery رو ، executeChange قرار دادم . (8 سال پیش)
0 0
الان یک مقایسه کردم بین ورژن 2 کتابخونه sqlite و ورژن 3 اون و فکر میکنم که توی ورژن 3 متد ها به هم ریخته و با اینکه syntax کد ها برای swift 3 , 4 به روز شده ولی نحوه ی تعریف متد ها دچار مشکل هستش و همون طور که در کامنت قبلی گفتم به طور مثال متد executeChange قابل دسترسی نیست و دلیلش هم فکر میکنم اینه که به اشتباه داخل متد createTable قرار گرفته و از آقای کاشی زاده خواهش میکنم که اگه براشون مقدوره ورژن اصلاح شده اون رو داخل گیت هاب یا همین جا بارگذاری کنن تا بتونیم از اون استفاده کنیم . (8 سال پیش)
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
hamidptb  8 سال پیش
0 0

 پاسخ صحیح

مشکلی که به وجود اومده بود برام رفع شد و توضیحات مربوط به اون رو میدم تا اگه یک موقع بچه های دیگه به این مورد برخورد کردن بتونن راحت تر مشکلشون رو حل کنن .

دلیل به وجود اومدن خطای EXC_BAD_INSTRUCTION این بود که من بعضی از خونه های جدول رو که از نوع TEXT بود رو به صورت پیش فرض که همون Null هستش داخل دیتابیسم به صورت دست نخورده گذاشته بودم و کد داخل برنامم به این صورت بود که باید کل اطلاعات داخل سطر هایی که از نوع TEXT بود رو بیرون میکشد و در یک جای برنامه به نمایش میذاشت . و علت به وجود اومدن خطای EXC_BAD_INSTRUCTION هم Null بودن برخی خونه های از نوع TEXT جدول sqlite بود . البته علت اینکه پیدا کردن این مشکل ی خورده سخت شد این بود که دقیقا همین دیتابیس مشابه با خونه های از نوع TEXT و دیتای Null رو من توی xcode ورژن 7 و swift 2 و کتابخونه sqlite 2.1 داشتم ولی اونجا بدون هیچ خطای اجرا میشد و همین تناقض باعث شدش که فک کنم مشکل از دیتابیس نباشه و دنبال رفع باگ تو کد swift بودم . و به طور خلاصه میشه گفت که تو ورژن 2.1 کتابخونه ی sqlite آقای کاشی زاده هندل کردن دیتای Null برای TEXT ها لحاظ شده ولی در نسخه 3 این کتابخونه این مورد وجود نداره و خودتون باید با تغییر دیتابیستون این مورد رو حل کنید .

پاسخ به سوال 
hamidptb  8 سال پیش
+1 0

فقط یک مورد دیگه هم که فکر میکنم در کتابخونه ی sqlite ورژن 3 وجود داره اینه متد های در این کتابخونه به هم ریخته و همون طور که توی نظرات قبلی هم گفتم به طور مثال اصلا متد executeChange قابل دسترسی نیست و در واقع داخل متد createTable قرار گرفته و چند جای دیگه ی کتابخونم به همین صورت به هم ریخته و جا به جا شده .

از آقای کاشی زاده خواهش میکنم که اگه ممکنه براشون ، ورژن جدید کتابخونه sqlite رو یک بررسی کنن و اگه دارای مشکل بود ، نسخه ی اصلاحی رو در اختیار ما قرار بدن و اگرم که کتابخونه مشکلی نداره و نحوه ی استفاده از متد های اون تغییر کرده بهمون اطلاع بدن .

بازم ممنون از آموزش های فوق العادتون


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .