บน iOS 6.1 UISwitch IBOutlet จะเป็นศูนย์เสมอ

ฉันประสบปัญหาขณะทำงานกับ UISwitch บน UITableView แบบคงที่ ฉันต้องคืนค่าสถานะสุดท้ายของ UISwitch บางค่าเมื่อโหลดแอป แต่เมื่อใดก็ตามที่ฉันตรวจสอบสถานะของ IBOutlet ก็จะเป็นศูนย์ ฉันได้พยายามจัดสรรตัวแปรด้วยตนเอง ซึ่งก็ไม่ได้ช่วยอะไรเช่นกัน

นี่คือสิ่งที่ฉันทำ:

การตั้งค่าController.h

//IBOutlet connected correctly
@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail;

การตั้งค่าController.m

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (!_switch_displayDetail) {
        NSLog(@"_switch_displayDetail is NIL"); //This is always displayed
    }

    //Switch is default to YES, I am trying to set it to NO
    //This line does nothing...
    [_switch_displayDetail setOn:[dataManager shouldDisplayDetail] animated:YES];
}

ทุกที่อื่นๆ เมื่อฉันตรวจสอบสถานะของ _switch_displayDetail จะไม่มีเลย ฉันกำลังเรียกวิธีการเริ่มต้นขั้นสูงทั้งหมด มีอะไรเปลี่ยนแปลงใน iOS 6.1 หรือไม่?

[แก้ไข] การใช้ตัวแปรสังเคราะห์ก็ไม่ได้ผลเช่นกัน

[แก้ไข 2] พบปัญหาว่าเป็นข้อบกพร่องใน Xcode หรือบน iPhone Simulator หลังจากการทดสอบบน iPod touch ของฉัน อัลกอริธึมเริ่มต้นทำงานได้อย่างสมบูรณ์แบบ

ฉันกำลังจะบ้ากับปัญหานี้ ...


person Bruno Philipe    schedule 04.02.2013    source แหล่งที่มา
comment
ตรวจสอบว่าคุณกำลังทำ initWithNibName และไม่ใช่แค่ init บน SettingsController หรือไม่   -  person Sathya    schedule 04.02.2013
comment
ตรวจสอบด้วยว่าคุณสะกดชื่อปลายปากกาอย่างถูกต้อง   -  person Fogmeister    schedule 04.02.2013
comment
ลอง self.switch_displayDetail แทน _switch_displayDetail   -  person Ravindra Bagale    schedule 04.02.2013
comment
ยกเลิกการเชื่อมโยง / เชื่อมโยงช่องทางใหม่อีกครั้ง   -  person albertamg    schedule 04.02.2013


คำตอบ (3)


ฉันรู้ดีอยู่แล้วว่าปัญหา Twilight Zone เหล่านั้นน่าหงุดหงิดเพียงใด เห็นได้ชัดว่ามีข้อมูลน้อยเกินไปที่จะวินิจฉัย แต่ฉันคิดว่าฉันจะแบ่งปันว่าฉันจะจัดการกับการแก้ไขข้อบกพร่องอย่างไร

  1. แทนที่ตัวตั้งค่าสำหรับ switch_displayDetail ในนั้นให้บันทึกค่า แต่ยังเป็น self
  2. จากนั้นใน viewWillAppear ให้บันทึกสิ่งเดียวกัน

ฉันรู้สึกว่าเราไม่ได้พูดถึงกรณีเดียวกันที่นี่ หากฉันพูดถูก ผู้ตั้งค่าจะแสดงค่า แต่ไม่ใช่ viewWillAppear หากฉันผิด ทั้งสองจะเป็นศูนย์ และในกรณีนี้คุณอาจเรียกใช้เมธอด init ไม่ถูกต้อง หรือการเชื่อมโยงของคุณไม่ถูกต้องใน IB

แค่สองเซ็นต์ของฉัน

person mprivat    schedule 04.02.2013
comment
ขอบคุณ ฉันคิดเรื่องเดียวกัน ฉันจะลองสิ่งนี้และโพสต์ผลลัพธ์ที่นี่ - person Bruno Philipe; 04.02.2013

ขอบคุณทุกคนสำหรับคำตอบ แต่หลังจากเกือบยอมแพ้ ฉันได้ทดสอบแอปของฉันบน iPod touch และมันก็ทำงานได้อย่างสมบูรณ์แบบ ดูเหมือนว่าเป็นข้อบกพร่องใน iPhone Simulator หรืออาจเป็นข้อบกพร่องใน Xcode มาก (ไม่มีอะไรใหม่ที่นี่) หลังจากรีเซ็ตการตั้งค่าและข้อมูลทั้งหมดบนเมนู iPhone Simulator มันก็ใช้งานได้เช่นกัน

ดังนั้น ก่อนที่จะบ้าบอ ทดสอบแอปของคุณบนอุปกรณ์จริง

person Bruno Philipe    schedule 04.02.2013
comment
การรีเซ็ตการตั้งค่าและข้อมูลใน Simulator ก็ทำเพื่อฉันเช่นกัน นอกจากนี้ ฉันพบสิ่งนี้บน iOS 6.0 เช่นกัน - person Frost; 12.02.2013

อันดับแรก :

@property (strong, nonatomic) IBOutlet UISwitch *switch_displayDetail; // should be a weak property

แล้วคุณได้ @synthesize ทรัพย์สินของคุณแล้วหรือยัง?

person Loris1634    schedule 04.02.2013
comment
บนคุณสมบัติ iOS 6.0 ไม่จำเป็นต้องสังเคราะห์ - person Bruno Philipe; 04.02.2013