ฉันกำลังจัดเก็บชื่อผู้ใช้ (อีเมล) และแฮชอีเมลและรหัสผ่านใน iOS KeyChain ผมใช้รุ่น ARC'ified พบที่นี่
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
ทั้งหมดนี้ใช้งานได้ดีเมื่อฉันต้องการดึงโทเค็นออกสำหรับการโทรเครือข่ายของฉันในขณะที่แอปทำงานอยู่ ใช้สำหรับการเข้าสู่ระบบจากการเริ่มต้นระบบใหม่ทั้งหมดรวมทั้งการโทรในเครือข่าย ปัญหาเริ่มต้นเมื่อแอปทำงานอยู่เบื้องหลัง
โปรดทราบว่าสิ่งนี้จะเกิดขึ้นเป็นระยะ ๆ เท่านั้นและฉันยังไม่ได้ปักหมุดลงใน iOS เวอร์ชันหรืออุปกรณ์ที่เฉพาะเจาะจง
ผู้ใช้เดินทางไปยังตำแหน่งที่ตั้ง (การตรวจสอบภูมิภาค) และฉันต้องการอัปเดตเซิร์ฟเวอร์ด้วยสถานะ ฉันพยายามดึงโทเค็นออกจากพวงกุญแจแบบเดียวกับที่ฉันโทรหาเครือข่ายอื่น ๆ และอัปเดตสถานะ แต่สำหรับผู้ใช้บางรายค่าจะเป็นศูนย์ หากไม่มีฉันจะอัปเดตข้อมูลเครือข่ายไม่ได้ เหตุใดสิ่งนี้จึงใช้ได้ผลกับคนส่วนใหญ่ แต่ไม่ได้ผลเพียงเล็กน้อย
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
ฉันกลับไปใช้เครื่องห่อพวงกุญแจเวอร์ชันที่ไม่ใช่ ARC แล้ว แต่ฉันก็ยังได้ผลลัพธ์เหมือนเดิม ฉันจะขอบคุณข้อเสนอแนะใด ๆ เกี่ยวกับเรื่องนี้ เป็นเพียงส่วนเล็ก ๆ ของผู้ใช้ของฉัน แต่เป็นปัญหาที่ฉันต้องการแก้ไขและไม่ต้องกังวล ขอบคุณล่วงหน้า.
นอกจากนี้งานเบื้องหลังทั้งหมดของฉันยังถูกตั้งค่าเป็น backgroundTask เพื่อป้องกันไม่ให้สิ่งต่างๆหมดเวลา ฉันไม่มีปัญหาใด ๆ กับงานที่อยู่รอบ ๆ พวงกุญแจ แต่ฉันไม่ปล่อยให้สิ่งต่างๆดำเนินต่อไปจนกว่าโทเค็นของฉันจะเต็ม
แก้ไข ฉันพบปัญหาของฉันโดยที่พวงกุญแจไม่ดึงค่าจากพื้นหลัง ฉันจะโพสต์คำตอบด้านล่างและยอมรับเพราะฉันรู้สึกว่าคำถามนี้อาจมีค่าสำหรับคนอื่นในภายหลัง