بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

 EXC_BAD_INSTRUCTION

مدیریت گفتگو
JSONObject 10 سال پیش
آخرین تغییر: 8 سال پیش

 دوستان وقت بخیر

 کد من چه ایرادی داره که اررور EXC_BAD_INSTRUCTION بهم میده

 

     @IBOutlet weak var edtNumber: UITextField!
internal var result: Int = 0

@IBAction func onButtonClicked(sender: UIButton) { result = Int(edtNumber.text!)! // Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) }

 مرسی .

نظرات

پاسخ‌ها 4

کاشی زاده 10 سال پیش

احتمالا edtName خالی هست یا به جای وارد کردن عدد دارید مقدار متنی وارد میکنید . اگر به Debug Area یا همون پنجره خطایابی دقت کنید باید برای شما خطایی را نمایش دهد :

 fatal error: unexpectedly found nil while unwrapping an Optional value

زمانیکه از علامت ! به عنوان Optional استفاده میکنید ، به این معنی هست که این مقدار کنترل شده هست و خالی نخواهد بود .
حالا راه حل :
- محدود کردن Keyboard برای وارد کردن مقادیر غیر عددی
- بررسی کنترل قبل از واریز با استفاده از دستور شرطی if و اطمینان از خالی نبودن خاصیت text مربوط به کنترل.

نظرات

JSONObject 10 سال پیش
مرسی ، ولی مطمئنم که وقتی به اون خط میرسه نه nilـه و نه "". ضمن اینکه مقادیر رو با کیبورد وارد نمیکنم ، باتن یک تا نه رو گذاشتم و متن داخل باتن که همون عدد باشه رو میخونم
کاشی زاده 10 سال پیش
در Debug Area چیزی برای شما ننوشته به عنوان خطا ؟
کاشی زاده 10 سال پیش
البته توجه داشته باشید که اگر مقدار غیر عددی نیز داخل آن درج کرده باشید باز مقدار nil است .
Mohammad Vp 10 سال پیش

 
 class ViewController: UIViewController {
   
    
  
    @IBOutlet weak var edtNumber: UITextField!
   
    internal var result:Int = 0
   
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    
    @IBAction func OnButtonClicked(sender: UIButton) {
        
        result = Int(edtNumber.text!)!
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

خوب این کد رو تست کردم و اروری نداد شمام میتونید همینو کپی پیست کنید ببینید مشکل حل میشه ؟؟

فقط مقادیر عددی بدون اسپیس وارد کنید

اگر مشکل حل نشد اسکرول کنید پایین, پست بعدی احتمالا کمکتون میکنه حل شه ...

نظرات

Mohammad Vp 10 سال پیش

خوب چون علاقه دارم با مشکلات درگیر شم فک کنم مشکلتونو فهمیدم به این عکس دقت کنید تا توضیحش بدم ارورش کپی ارور شماست!

اول ارور رو بخونید! دقیقا ارور شماست !!!(البته این ارور میتونه بر اثر وارد کردن مقادیری غیر از عدد گرفته بشه ولی شما گفتید که مقادیر درست وارد میشه پس یحتمل مشکلتون باید این باشه)!

حالا مشکل چیه؟

شما احتمالا یا یادتون رفته یا بر اثر اشتباه اتصال بین UI (تکست فیلد) رو با کدی که نوشتید قطع کردید وقتی اون دایره خالی باشه یعنی به هیچ کجا وصل نیست! اگرم وصله شاید به مکان اشتباهی وصل شده پس حتما ابتدا اتصال بین کد و ویو کنترلتونو بررسی کنید.

و وقتی برروی باتن زده میشه مقداره nil وارد کد میشه و شما در کدتون گفتید که من صد درصد مطمنم هیج چیزی جز اینتیجر عدد وارد نمیشه و ازتون ارور میگیره

ولی چناچه همه چی درست بود کدی که در پست قبلی نوشتم رو جایگزین کنید و اتصالات رو برقرار کنید قطعا نتیجه خواهید گرفت!

امیدوارم مشکلتون همین باشه تا حل شه:)

موفق باشید

نظرات

کاشی زاده 10 سال پیش
فاصله بین : و Int مشکلی ایجاد نمیکنه ولی همونطور که اشاره کردید ممکن هست Connection مربوطه قطع شده باشه و با توجه به وجود ! بعد از Property مربوط به edtNumber موقع کامپایل خطایی دریافت نشده و این خاصیت موقع اجرا خالی هست (nil)
کاشی زاده 10 سال پیش
در واقع در خط مربوط به دستور واریز شما از دو علامت ! استفاده کردید اولی (داخل پرانتز) مربوط به خالی نبودن خاصیت text و دومی مربوط به وارد شدن عدد صحیح و تبدیل آن از String به Int هست .
Mohammad Vp 10 سال پیش
بله درسته خودمم از موضوع اول که فاصله بود مطمن نبودم ولی چندبار که به مشکل خوردم سر همین قضیه اسپیس زدن واسه همون گفتم شاید حساس باشه به هر حال ممنون و امیدوارم مشکل ایشون حل شده باشه
JSONObject 10 سال پیش
متاسفانه یا خوشبختانه کانکشن ها متصل اند و با و بدون فاصله این مشکل هنوز گاهی وجود داره ولی سناریوی ثابتی براش پیدا نکردم، مرسی
کاشی زاده 10 سال پیش
یکبار پروژه رو با زدن CTRL + F4 کلین کنید و بعد با زدن دکمه F4 به صورت تکی مجددا پروژه رو بیلد کنید . برنامه رو هم از روی Simulator قبل از اجرای مجدد حذف کنید .
Mohammad Vp 10 سال پیش
خب اگه کدها درست باشند و کانکشن ها هم وصل باشند و بعد از کلین کردن بازهم مشکل داشته باشه که واقعا عجیبه , بنظرم کلا پروژه رو پوششو دیلیت کنید دوباره یکی دیگه بسازید , واقعا عجیبه که همه چی درست باشه ولی کار نکنه!
Mhd3 8 سال پیش

سلام.. 

منم این ارور رو ژمان اجرا میگیره :

 for record in sliderRecords
{
if record.column["pdcc"]?.asString() == "services2"
{
let tmp = (record.column["pdtitle"]!.asString())!
learn.pdtitle.append(tmp) //exc_bad_instruction (code=exc_i386_invop subcode=0x0)
services.mainTitle = "آموزش و مشاوره"
}
}

این کلاسم هست : 

 class StructService
{

var pdtitle:[String]!
var mainTitle:String!
var expanded: Bool!
}

var learn = StructService()

نظرات


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