คำถามติดแท็ก objective-c

แท็กนี้ควรใช้กับคำถามที่เกี่ยวกับคุณสมบัติ Objective-C หรือขึ้นอยู่กับรหัสในภาษา ควรใช้แท็ก [cocoa] และ [cocoa-touch] เพื่อสอบถามเกี่ยวกับกรอบหรือคลาสของ Apple ใช้แท็กที่เกี่ยวข้อง [ios], [macos], [apple-watch] และ [tvos] สำหรับปัญหาเฉพาะของแพลตฟอร์มเหล่านั้น

5
iOS เริ่มเธรดพื้นหลัง
ฉันมี sqlitedb ขนาดเล็กในอุปกรณ์ iOS ของฉัน เมื่อผู้ใช้กดปุ่มฉันจะดึงข้อมูลจาก sqlite และแสดงให้ผู้ใช้เห็น ส่วนที่ดึงข้อมูลนี้ฉันต้องการทำในเธรดพื้นหลัง (เพื่อไม่บล็อกเธรดหลักของ UI) ฉันทำแบบนี้ - [self performSelectorInBackground:@selector(getResultSetFromDB:) withObject:docids]; หลังจากดึงข้อมูลและประมวลผลเล็กน้อยฉันต้องอัปเดต UI แต่เนื่องจาก (ตามแนวทางปฏิบัติที่ดี) เราไม่ควรทำการอัปเดต UI จากเธรดพื้นหลัง ฉันเรียกว่าselectorบน mainthread เช่นนั้น - [self performSelectorOnMainThread:@selector(showResults) withObject:nil waitUntilDone:NO]; แต่แอพของฉันขัดข้องในขั้นตอนแรก เช่นเริ่มต้นเธรดพื้นหลัง นี่ไม่ใช่วิธีเริ่มเธรดพื้นหลังใน iOS ใช่ไหม อัปเดต 1:หลังจากที่[self performSelectorInBackground....ฉันได้รับ stacktrace นี้ไม่มีข้อมูลอะไรเลย - อัปเดต 2:ฉันได้ลองเริ่มเธรดพื้นหลังเช่นนั้น - [NSThread detachNewThreadSelector:@selector(getResultSetFromDB:) toTarget:self withObject:docids];แต่ฉันก็ยังได้รับ stacktrace …

10
กึ่งกลาง NSTextAttachment image ถัดจาก UILabel บรรทัดเดียว
ฉันต้องการต่อท้ายNSTextAttachmentรูปภาพเข้ากับสตริงที่มาจากแหล่งข้อมูลของฉันและจัดให้อยู่กึ่งกลางในแนวตั้ง ฉันใช้รหัสต่อไปนี้เพื่อสร้างสตริงของฉัน: NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:DDLocalizedString(@"title.upcomingHotspots") attributes:attrs]; NSTextAttachment *attachment = [[NSTextAttachment alloc] init]; attachment.image = [[UIImage imageNamed:@"help.png"] imageScaledToFitSize:CGSizeMake(14.f, 14.f)]; cell.textLabel.attributedText = [str copy]; textLabelแต่ภาพจะปรากฏขึ้นเพื่อให้สอดคล้องกับด้านบนของของเซลล์ ฉันจะเปลี่ยน rect ที่วาดไฟล์แนบได้อย่างไร

13
การปิดตัวควบคุมมุมมองที่นำเสนอ
ฉันมีคำถามตามทฤษฎี ตอนนี้ฉันกำลังอ่านคู่มือViewControllerของ Apple พวกเขาเขียน: เมื่อถึงเวลาที่ต้องปิดตัวควบคุมมุมมองที่นำเสนอแนวทางที่ต้องการคือให้ตัวควบคุมมุมมองที่นำเสนอปิดมัน กล่าวอีกนัยหนึ่งเมื่อใดก็ตามที่เป็นไปได้ตัวควบคุมมุมมองเดียวกับที่นำเสนอตัวควบคุมมุมมองควรรับผิดชอบในการปิดมันด้วย แม้ว่าจะมีเทคนิคหลายประการในการแจ้งตัวควบคุมมุมมองการนำเสนอว่าควรปิดตัวควบคุมมุมมองที่นำเสนอ แต่เทคนิคที่ต้องการคือการมอบหมาย แต่ฉันไม่สามารถอธิบายได้ว่าทำไมฉันต้องสร้างโปรโตคอลใน VC ที่นำเสนอและเพิ่มตัวแทนที่เปลี่ยนแปลงได้สร้างวิธีการมอบสิทธิ์ในการนำเสนอ VC เพื่อปิด VC ที่นำเสนอแทนที่จะเรียกแบบธรรมดาในวิธีการควบคุมมุมมองที่นำเสนอ [self dismissViewControllerAnimated:NO completion:nil]เหรอ? ทำไมตัวเลือกแรกจึงดีกว่า? ทำไม Apple ถึงแนะนำ

7
จะตรวจจับภาพเคลื่อนไหวนั้นได้สิ้นสุดลงใน UITableView beginUpdates / endUpdates ได้อย่างไร
ฉันกำลังแทรก / ลบเซลล์ตารางโดยใช้การinsertRowsAtIndexPaths/deleteRowsAtIndexPathsห่อในbeginUpdates/endUpdates. ฉันยังใช้beginUpdates/endUpdatesเมื่อปรับ rowHeight การดำเนินการทั้งหมดนี้เป็นภาพเคลื่อนไหวโดยค่าเริ่มต้น ฉันจะสามารถตรวจพบว่าภาพเคลื่อนไหวได้สิ้นสุดลงเมื่อใช้beginUpdates/endUpdates?
116 iphone  objective-c  ios  ipad 

7
ปุ่มยกเลิก UIActionSheet พฤติกรรมแปลก ๆ
ฉันมี UIBarButtonItem ที่เปิดแผ่นงานเพื่อเสนอทางเลือกให้ผู้ใช้เกี่ยวกับสิ่งที่ต้องทำ ทุกอย่างทำงานตามที่คาดไว้เว้นแต่ฉันจะพยายามคลิกที่ปุ่ม "ยกเลิก" เป้าหมายของปุ่มดูเหมือนจะเลื่อนขึ้นจากที่ที่ควรจะเป็น ฉันสามารถเปิดใช้งานได้โดยคลิกที่ตรงกลางของปุ่ม "ยกเลิก" และ "ตกลง" เท่านั้น ฉันได้ลองใช้ Action Sheet ในแอปพลิเคชั่นอื่น ๆ แล้วและทำงานได้ดีไม่ใช่แค่นิ้วโป้งใหญ่ของฉัน แผ่นงานกำลังเปิดใน UIViewController - (void)showOpenOptions { UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link") otherButtonTitles:nil]; [sheet showInView:self.view]; [sheet release]; }


10
การใช้ `textField: shouldChangeCharactersInRange:` ฉันจะรับข้อความรวมถึงอักขระที่พิมพ์ในปัจจุบันได้อย่างไร
ฉันใช้รหัสด้านล่างเพื่อลองและtextField2อัปเดตเนื้อหาข้อความให้ตรงกับtextField1ทุกครั้งที่ผู้ใช้พิมพ์เข้าtextField1มา - (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string { if (theTextField == textField1){ [textField2 setText:[textField1 text]]; } } อย่างไรก็ตามผลลัพธ์ที่ฉันสังเกตได้คือ ... textField2 คือ "12" เมื่อ textField1 เป็น "123" textField2 คือ "123" เมื่อ textField1 เป็น "1234" ... เมื่อสิ่งที่ฉันต้องการคือ: textField2 คือ "123" เมื่อ textField1 เป็น "123" textField2 คือ "1234" เมื่อ …

2
NSLog ที่อยู่หน่วยความจำของอ็อบเจ็กต์ในเมธอดคำอธิบายที่ถูกแทนที่
ฉันกำลังลบล้างวิธีการอธิบายวัตถุ ฉันต้องการทราบวิธีพิมพ์ที่อยู่หน่วยความจำของวัตถุเพื่อแทนที่{???}ในโค้ดด้านล่าง: -(NSString *) description { return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@", {???}, self.parameterOne, self.paramterTwo]; } ฉันต้องการให้พิมพ์ในคอนโซลดังนี้: <SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
116 objective-c  nslog 

2
NSObject + load and + initialize - เขาทำอะไร?
ฉันสนใจที่จะทำความเข้าใจสถานการณ์ที่ทำให้นักพัฒนาซอฟต์แวร์ลบล้าง + เริ่มต้นหรือ + โหลด เอกสารประกอบทำให้ชัดเจนว่าเมธอดเหล่านี้เรียกให้คุณโดยรันไทม์ Objective-C แต่นั่นคือทั้งหมดที่ชัดเจนจากเอกสารของวิธีการเหล่านั้น :-) ความอยากรู้ของฉันมาจากการดูโค้ดตัวอย่างของ Apple - MVCNetworking คลาสโมเดลของพวกเขามี+(void) applicationStartupวิธีการ มันทำหน้าที่ดูแลระบบไฟล์บางอย่างอ่าน NSDefaults ฯลฯ ฯลฯ ... และหลังจากพยายามรวบรวมวิธีการเรียนของ NSObject ดูเหมือนว่างานภารโรงนี้อาจจะโอเคที่จะใส่ใน + load ฉันแก้ไขโครงการ MVCNetworking โดยลบการโทรใน App Delegate เป็น + applicationStartup และใส่บิตการดูแลทำความสะอาดลงใน + โหลด ... คอมพิวเตอร์ของฉันไม่ลุกเป็นไฟ แต่นั่นไม่ได้หมายความว่าถูกต้อง! ฉันหวังว่าจะได้รับความเข้าใจเกี่ยวกับรายละเอียดปลีกย่อย gotchas และ whatnots เกี่ยวกับวิธีการตั้งค่าแบบกำหนดเองที่คุณต้องเรียกเทียบกับ + load หรือ + initialize สำหรับ …

11
วิธีสร้าง UILabel URL / โทรศัพท์ที่คลิกได้
ฉันต้องการสร้างป้ายกำกับที่คลิกได้บนแอปของฉันซึ่งนำฉันไปสู่หน้าเว็บ Safari ฉันยังต้องการให้ผู้ใช้สามารถโทรหาหมายเลขได้โดยคลิกที่พวกเขาเท่านั้น? ขอบคุณสำหรับคำแนะนำของคุณ

5
การนำเข้าโปรโตคอล Swift ในคลาส Objective-C
ฉันพยายามที่จะนำเข้าพิธีสาร Swift ชื่อAnalyticProtocolลงในระดับ Objective-C AnalyticFactoryชื่อ protocol AnalyticProtocol { } ฉันเริ่มต้นจากโปรเจ็กต์ Objective-C ที่มีอยู่ (ฉันไม่ได้สร้างโปรเจ็กต์ Swift ใหม่ด้วย xCode และฉันไม่พบวิธีกำหนดค่าโปรเจ็กต์ Objective-C ของฉันให้เป็นโปรเจ็กต์ Swift ใน xCode 6 ) สวิฟท์ในแฟ้มของฉันฉันรวมถึง.hไฟล์ชื่อMyProjectName-Swift.hแต่กลับมาเรียบเรียงฉันมีข้อผิดพลาดบอกฉันว่ามันไม่ได้อยู่ ฉันจึงสร้าง.hไฟล์ชื่อMyProjectName-Swift.hที่ว่างเปล่า (ฉันไม่รู้ว่าควรใส่อะไรไว้ข้างใน) ในเอกสารของ Appleพวกเขาบอกว่าฉันต้องรวม.hไฟล์ที่มีชื่อMyProjectName-Swift.hอยู่ใน.mไฟล์ของฉัน แต่ฉันไม่จำเป็นต้องรวมไว้ใน.mไฟล์ของฉันแต่เป็นไฟล์.h. สิ่งนี้อาจเป็นปัญหาได้หรือไม่? เมื่อฉันพยายามรวบรวมฉันพบข้อผิดพลาดนี้:: 0: error: xxxAnalyticFactory.h: 39: ไม่พบการประกาศโปรโตคอลสำหรับ 'AnalyticProtocol' และรหัสที่กล่าวหา: @interface AnalyticFactory : NSObject { Class<AnalyticProtocol> _analyticProtocolClass; // The type of …
116 objective-c  swift 

4
การยกเลิกการเข้าคิว performSelector: afterDelay โทร
มีใครทราบบ้างว่าเป็นไปได้หรือไม่ที่จะยกเลิกเหตุการณ์ตัวเลือกที่จัดคิวไว้แล้วจากสแต็กเหตุการณ์หรือสแต็กตัวจับเวลา (หรือกลไกใดก็ตามที่ API ใช้) เมื่อคุณโทรperformSelector:withObject:afterDelay? ฉันใช้สแต็กเหตุการณ์นี้เพื่อแก้ไขแอตทริบิวต์ของรูปภาพภายในแท็บ TabBar และบางครั้งอาจจัดคิวการเปลี่ยนแปลงที่มีมูลค่าสูงสุด 10 วินาทีในหนึ่งครั้งที่ดำเนินการอย่างรวดเร็วสำหรับการวนซ้ำ ... อาจจะ 5 มิลลิวินาทีหรือมากกว่านั้น ปัญหาเกิดขึ้นหากผู้ใช้สลับแท็บ ... เช่นบอกว่าฉันมีการปรับเปลี่ยนรูปภาพในคิวสำหรับรูปภาพที่แสดงทันทีที่เปิดใช้งานแท็บ # 4 จากนั้นผู้ใช้จะเปลี่ยนไปใช้แท็บ # 3 อย่างรวดเร็วจากนั้นกลับไปที่แท็บ # 4 ... จากนั้นจะจัดคิวใหม่อีก 10 วินาทีของการแก้ไขในขณะที่คิวเก่ายังคงเล่นอยู่อาจจะอยู่ที่คิวประมาณ 2 หรือ 3 วินาทีหากเปลี่ยนเร็วพอ ... แต่ถึง 5 วินาทีในการ สตรีมมีปัญหา ดังนั้นฉันจึงต้องการวิธียกเลิกการเปลี่ยนแปลงสแต็กเก่าก่อนที่จะใส่สแต็กใหม่ ... ฉันกำลังเขียนข้อความค้นหานี้ในอดีตกาลเนื่องจากฉันได้หาทางเลือกอื่นในการแก้ปัญหานี้โดยการเพิ่มตัวกรองเหตุการณ์ที่มีตาเหยี่ยวในฟังก์ชันการเล่น อย่างไรก็ตามฉันยังคงสงสัยว่าจะสามารถยกเลิกกิจกรรมได้หรือไม่เพราะฉันรู้สึกว่าความรู้ดังกล่าวจะเป็นประโยชน์ในอนาคต ขอบคุณสำหรับความช่วยเหลือใด ๆ ที่แสดง :)

19
อนุญาตให้โต้ตอบกับ UIView ภายใต้ UIView อื่น
มีวิธีง่ายๆในการอนุญาตให้โต้ตอบกับปุ่มใน UIView ที่อยู่ใต้ UIView อื่นหรือไม่โดยที่ไม่มีวัตถุจริงจาก UIView ด้านบนที่ด้านบนของปุ่ม ตัวอย่างเช่นในขณะนี้ฉันมี UIView (A) ที่มีวัตถุอยู่ด้านบนและวัตถุที่ด้านล่างของหน้าจอและไม่มีอะไรอยู่ตรงกลาง อยู่ด้านบนของ UIView อื่นที่มีปุ่มตรงกลาง (B) อย่างไรก็ตามฉันไม่สามารถโต้ตอบกับปุ่มที่อยู่ตรงกลางของ B ได้ ฉันเห็นปุ่มใน B - ฉันได้ตั้งค่าพื้นหลังของ A เป็น clearColor - แต่ปุ่มใน B ดูเหมือนจะไม่ได้รับการสัมผัสแม้ว่าจะไม่มีวัตถุจาก A อยู่ที่ด้านบนของปุ่มเหล่านั้นก็ตาม แก้ไข - ฉันยังต้องการที่จะสามารถโต้ตอบกับวัตถุใน UIView ด้านบน แน่นอนว่ามีวิธีง่ายๆในการทำเช่นนี้?

30
“ ยังคงต้องใช้การจัดวางอัตโนมัติหลังจากเรียกใช้ -layoutSubviews” ด้วยคลาสย่อย UITableViewCell
ใช้ XCode 4.5 และ iOS 6 ฉันกำลังพัฒนาแอปที่มีมุมมองตารางแบบง่ายพร้อมเซลล์ที่กำหนดเอง ฉันทำสิ่งนี้เป็นร้อยครั้งแล้วใน iOS 5 และต่ำกว่า แต่ด้วยเหตุผลบางประการระบบ autoLayout ใหม่ทำให้ฉันมีปัญหามากมาย ฉันตั้งค่ามุมมองตารางและเซลล์ต้นแบบใน IB เพิ่มมุมมองย่อยและต่อสายเป็น IBOutlets จากนั้นตั้งค่าตัวแทนและแหล่งข้อมูลของฉัน อย่างไรก็ตามตอนนี้เมื่อใดก็ตามที่ดึงข้อมูลจากเซลล์แรกcellForRowAtIndexPathฉันได้รับข้อผิดพลาดต่อไปนี้: *** การยืนยันล้มเหลวใน - [ShopCell layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2372/UIView.m:5776 *** การยุติแอปเนื่องจากข้อยกเว้นที่ไม่ถูกจับ 'NSInternalInconsistencyException' เหตุผล: 'ยังคงต้องใช้เค้าโครงอัตโนมัติหลังจากดำเนินการ -layoutSubviews การใช้งาน -layoutSubviews ของ ShopCell จำเป็นต้องโทรหา super ' ฉันไม่ได้ใช้เมธอด -layoutSubviews ในเซลล์คลาสย่อยของฉัน (ShopCell) และแม้ว่าฉันจะพยายามทำเช่นนั้นและเพิ่มการโทรขั้นสูงตามที่แนะนำฉันก็ยังคงได้รับข้อผิดพลาดเดียวกัน ถ้าฉันลบมุมมองย่อยออกจากเซลล์ใน IB และเปลี่ยนเป็น UITableViewCell มาตรฐานทุกอย่างจะทำงานตามที่คาดไว้แม้ว่าฉันจะไม่เหลือข้อมูลในเซลล์ก็ตาม ฉันเกือบจะแน่ใจแล้วว่ามีบางอย่างง่ายๆที่ฉันขาดหายไป …


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.