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

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

24
การสร้าง Xcode ล้มเหลว“ สัญลักษณ์ที่ไม่ได้กำหนดสำหรับสถาปัตยกรรม x86_64”
คำถามของ Xcode มือใหม่: มันเป็นประสบการณ์ครั้งแรกของฉันกับ Xcode 4.6.3 ฉันกำลังพยายามเขียนโปรแกรมคอนโซลที่ง่ายมากซึ่งค้นหาอุปกรณ์ BT ที่จับคู่แล้วพิมพ์ลงใน NSLog มันสร้างด้วยข้อผิดพลาดดังต่อไปนี้: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_IOBluetoothDevice", referenced from: objc-class-ref in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) ฉันค้นหาอย่างบ้าคลั่ง ปัญหาที่พบบ่อยควรอ้างอิงถึงไฟล์ซึ่งมีเฉพาะไฟล์ส่วนหัวที่นำเข้าและไม่พบการใช้งาน (* .m-file) โดย linker อย่างไรก็ตามห้องสมุด …

9
รักษาวงจรใน "ตัวเอง" กับบล็อก
ฉันเกรงว่าคำถามนี้ค่อนข้างง่าย แต่ฉันคิดว่ามันเกี่ยวข้องกับโปรแกรมเมอร์ Objective-C จำนวนมากที่เข้าบล็อก สิ่งที่ฉันได้ยินคือตั้งแต่บล็อกจับตัวแปรภายในที่อ้างอิงภายในพวกเขาเป็นconstสำเนาการใช้selfภายในบล็อกอาจส่งผลให้เกิดการวนรอบในกรณีที่ควรคัดลอกบล็อกนั้น ดังนั้นเราควรจะใช้__blockเพื่อบังคับให้บล็อกจัดการโดยตรงselfแทนที่จะคัดลอกบล็อก __block typeof(self) bself = self; [someObject messageWithBlock:^{ [bself doSomething]; }]; แทนที่จะเป็นเพียงแค่ [someObject messageWithBlock:^{ [self doSomething]; }]; สิ่งที่ฉันอยากรู้มีดังต่อไปนี้ถ้าเป็นจริงมีวิธีที่ฉันสามารถหลีกเลี่ยงความอัปลักษณ์ (นอกเหนือจากการใช้ GC) หรือไม่

5
เมื่อใดที่จะใช้ dequeueReusableCellWithIdentifier vs dequeueReusableCellWithIdentifier: forIndexPath
มีสองเกินพิกัดสำหรับ dequeueReusableCellWithIdentifier และฉันพยายามที่จะตรวจสอบว่าเมื่อใดที่ฉันควรใช้หนึ่ง vs อื่น ๆ ? เอกสารแอปเปิ้ลเกี่ยวกับสถานะฟังก์ชั่น forIndexPath "วิธีนี้ใช้พา ธ ดัชนีเพื่อดำเนินการกำหนดค่าเพิ่มเติมตามตำแหน่งของเซลล์ในมุมมองตาราง" ฉันไม่แน่ใจว่าจะตีความได้อย่างไร
167 ios  objective-c  swift 

13
Objective-C สามารถสลับกับ NSString ได้หรือไม่?
มีวิธีที่ชาญฉลาดกว่านี้ในการเขียนซ้ำหรือไม่? if ([cardName isEqualToString:@"Six"]) { [self setValue:6]; } else if ([cardName isEqualToString:@"Seven"]) { [self setValue:7]; } else if ([cardName isEqualToString:@"Eight"]) { [self setValue:8]; } else if ([cardName isEqualToString:@"Nine"]) { [self setValue:9]; }

3
ARC และ bridged cast
ด้วย ARC ฉันไม่สามารถเลือกใช้อีกต่อCGColorRefไปidได้ ฉันเรียนรู้ว่าฉันต้องทำนักแสดงที่เชื่อมโยง ตามเอกสารดังกราว : หล่อสะพานเป็น C- โยนสไตล์ข้อเขียนกับหนึ่งในสามคำ: (__bridge T) opTปลดเปลื้องตัวถูกดำเนินการประเภทปลายทาง หากT เป็นประเภทตัวชี้วัตถุที่คงไว้ได้นั้นopจะต้องมีประเภทตัวชี้ที่ไม่สามารถเก็บรักษาได้ ถ้าTเป็นประเภทพอยน์เตอร์ที่ไม่สามารถเก็บถาวรได้ op จะต้องมีประเภทพอยน์เตอร์ของวัตถุที่คงอยู่ได้ มิฉะนั้นนักแสดงจะหล่อขึ้นมา ไม่มีการถ่ายโอนความเป็นเจ้าของและ ARC จะไม่มีการดำเนินการเก็บรักษาไว้ (__bridge_retained T) opปลดเปลื้องตัวถูกดำเนินการซึ่งจะต้องมีประเภทตัวชี้วัตถุที่เก็บรักษาไว้กับประเภทปลายทางซึ่งจะต้องเป็นประเภทตัวชี้ที่ไม่สามารถเก็บรักษาได้ ARC จะรักษาค่าไว้โดยขึ้นอยู่กับการปรับค่าตามปกติตามปกติและผู้รับจะรับผิดชอบในการปรับสมดุล +1 นั้น (__bridge_transfer T) opปลดเปลื้องตัวถูกดำเนินการซึ่งจะต้องมีประเภทตัวชี้ที่ไม่สามารถเก็บรักษาไว้กับประเภทปลายทางซึ่งจะต้องเป็นประเภทตัวชี้วัตถุที่รักษาได้ ARC จะปล่อยค่าในตอนท้ายของนิพจน์แบบปิดล้อมซึ่งขึ้นอยู่กับการเพิ่มประสิทธิภาพตามปกติของค่าท้องถิ่น การปลดเปลื้องเหล่านี้จำเป็นต้องมีเพื่อถ่ายโอนวัตถุเข้าและออกจากการควบคุม ARC; ดูเหตุผลในส่วนการแปลงของพอยน์เตอร์พอยน์เตอร์ที่เก็บได้ การใช้__bridge_retainedหรือ__bridge_transferโยนเพื่อโน้มน้าวใจ ARC ให้ปล่อยการเก็บหรือปล่อยที่ไม่สมดุลตามลำดับเป็นรูปแบบที่ไม่ดี ในสถานการณ์แบบใดฉันจะใช้แต่ละสถานการณ์ ตัวอย่างเช่นCAGradientLayerมีcolorsคุณสมบัติที่รับอาร์เรย์ของCGColorRefs ฉันเดาว่าฉันควรใช้__brigeที่นี่ แต่ทำไมฉันควร (หรือไม่ควร) ไม่ชัดเจน

7
แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการตั้งชื่อไฟล์ Swift ที่เพิ่มส่วนขยายไปยังวัตถุที่มีอยู่คืออะไร
มันเป็นไปได้ที่จะเพิ่มส่วนขยายที่มีอยู่วัตถุประเภทสวิฟท์ใช้ส่วนขยายตามที่อธิบายไว้ในสเปคภาษา ด้วยเหตุนี้จึงเป็นไปได้ที่จะสร้างส่วนขยายเช่น: extension String { var utf8data:NSData { return self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! } } อย่างไรก็ตามวิธีการตั้งชื่อที่ดีที่สุดสำหรับไฟล์ต้นฉบับของ Swift ที่มีนามสกุลดังกล่าวคืออะไร ในอดีตที่ผ่านมาการประชุมคือการใช้extendedtype+categoryname.mสำหรับชนิด Objective-C ที่กล่าวไว้ในวัตถุประสงค์-C คู่มือ แต่ตัวอย่างของ Swift ไม่มีชื่อหมวดหมู่และการเรียกมันString.swiftดูไม่เหมาะสม ดังนั้นคำถามคือ: จากการStringขยายข้างต้นไฟล์ swift ควรจะเรียกว่าอะไร?
166 ios  objective-c  swift  xcode 

4
NSInvalidUnarchiveOperationException: ไม่สามารถสร้างอินสแตนซ์ของคลาสที่ชื่อว่า NSLayoutConstraint
ฉันใหม่มากในการนี้. ฉันทำตามขั้นตอนการสอนของ Apple สำหรับโครงการ iPhone "HelloWorld" ฉันขับมันในเครื่องจำลอง iPhone 5.0 และมันพัง: 2012-11-02 14: 46: 06.782 HelloWorld [9880: c07] * แอปสิ้นสุดเนื่องจากข้อยกเว้นที่ไม่ได้ตรวจสอบ 'NSInvalidUnarchiveOperationException' เหตุผล: 'ไม่สามารถสร้างอินสแตนซ์ของคลาสชื่อ NSLayoutConstraint' * 0xea2d0a 0xea2d0a 0xea2d0a 0xea2d0a 0xea2d0a 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 …

18
วิธีโหลดไฟล์ html โลคัลลงใน UIWebView
ฉันกำลังพยายามโหลดไฟล์ html ลงใน UIWebView ของฉัน แต่มันไม่ทำงาน นี่คือขั้นตอน: ฉันมีโฟลเดอร์ชื่อ html_files ในโครงการของฉัน จากนั้นฉันสร้าง webView ในเครื่องมือสร้างอินเตอร์เฟสและกำหนดทางออกให้กับมันใน viewController นี่คือรหัสที่ฉันใช้เพื่อต่อท้ายไฟล์ html: -(void)viewDidLoad { NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"]; NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile]; [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]]; [super viewDidLoad]; } ไม่สามารถใช้งานได้และ UIWebView ว่างเปล่า ฉันขอขอบคุณความช่วยเหลือ

4
วิธีที่ดีที่สุดในการสื่อสารระหว่างตัวควบคุมมุมมองคืออะไร
ด้วยความใหม่ในวัตถุประสงค์ -c, cocoa และ iPhone dev โดยทั่วไปฉันมีความปรารถนาอย่างแรงกล้าที่จะใช้ภาษาและกรอบการทำงานให้เกิดประโยชน์สูงสุด หนึ่งในแหล่งข้อมูลที่ฉันใช้คือบันทึกย่อของชั้นเรียน CS193P ของ Stanford ที่พวกเขาทิ้งไว้บนเว็บ ประกอบด้วยบันทึกการบรรยายงานที่มอบหมายและรหัสตัวอย่างและเนื่องจากหลักสูตรได้รับการพัฒนาโดย Apple dev's ฉันจึงคิดว่าเป็น "จากปากม้า" แน่นอน เว็บไซต์ชั้นเรียน: http://www.stanford.edu/class/cs193p/cgi-bin/index.php การบรรยาย 08 เกี่ยวข้องกับการมอบหมายให้สร้างแอปที่ใช้ UINavigationController ซึ่งมี UIViewControllers หลายรายการที่ถูกส่งไปยังสแต็ก UINavigationController นั่นคือวิธีที่ UINavigationController ทำงาน นั่นเป็นเหตุผล อย่างไรก็ตามมีคำเตือนที่เข้มงวดในสไลด์เกี่ยวกับการสื่อสารระหว่าง UIViewControllers ของคุณ ฉันจะอ้างอิงจากเรื่องร้ายแรงของสไลด์: http://cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf หน้า 16/51: วิธีที่จะไม่แบ่งปันข้อมูล ตัวแปรทั่วโลกหรือซิงเกิลตัน ซึ่งรวมถึงตัวแทนแอปพลิเคชันของคุณ การพึ่งพาโดยตรงทำให้รหัสของคุณใช้ซ้ำได้น้อยลง และยากต่อการดีบัก & ทดสอบ ตกลง. ฉันลงกับที่ อย่าสุ่มโยนวิธีการทั้งหมดของคุณที่จะใช้สำหรับการสื่อสารระหว่าง viewcontroller …

9
ใน Objective-C เหตุใดฉันจึงควรตรวจสอบว่าตนเอง = [super init] ไม่ใช่ศูนย์หรือไม่?
ฉันมีคำถามทั่วไปเกี่ยวกับการเขียนวิธีการเริ่มต้นใน Objective-C ฉันเห็นมันทุกหนทุกแห่ง (รหัสของ Apple หนังสือรหัสโอเพนซอร์สและอื่น ๆ ) ว่าวิธีการเริ่มต้นควรตรวจสอบว่าตัวเอง = [super init] ไม่ได้เป็นศูนย์ก่อนที่จะดำเนินการเริ่มต้นต่อไป แม่แบบ Apple เริ่มต้นสำหรับวิธีการเริ่มต้นคือ: - (id) init { self = [super init]; if (self != nil) { // your code here } return self; } ทำไม? ฉันหมายความว่าเมื่อ init จะกลับมาเป็นศูนย์ได้อย่างไร ถ้าฉันโทรหา init บน NSObject แล้วกลับมาว่างเปล่าบางอย่างก็ต้องเมาแน่ ๆ ใช่มั้ย และในกรณีนี้คุณอาจไม่เขียนโปรแกรม ... …
165 objective-c  null  init 

14
ดีบักเกอร์ Xcode ไม่พิมพ์วัตถุและแสดงว่าไม่มีเมื่อใด
Xcode แสดงข้อผิดพลาดเมื่อพยายามพิมพ์วัตถุด้วยpo <objectName>แต่เพียงหนึ่งโครงการ ข้อผิดพลาด: ไม่สามารถทำให้เป็นจริง struct: ขนาดของตัวแปร <varName> ไม่เห็นด้วยกับขนาดของ ValueObject เกิดข้อผิดพลาดในการดำเนินการไม่สามารถ PrepToExecuteJITExpression ดีบัก Xcode ยังแสดงวัตถุทั้งหมดเป็นnil( selfยกเว้น) เมื่อพวกเขาไม่ได้ ( NSLogแสดงผลลัพธ์ที่ถูกต้องตามที่เห็นในภาพ) ฉันไม่รู้ว่าเกิดอะไรขึ้นกับโครงการ โครงการอื่น ๆ ทำงานได้ดี มีความคิดอะไรที่จะเป็น? (การทำความสะอาดโครงการไม่มีผลกระทบ)

3
วัตถุประสงค์ C ++ คืออะไร [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา Objective C ++ คืออะไรและฉันสามารถใช้ภาษานี้ใน Xcode ได้อย่างไร

11
ฉันจะหน่วงเวลาการเรียกใช้เมธอดเป็นเวลา 1 วินาทีได้อย่างไร
มีวิธีที่ง่ายในการชะลอการเรียกเมธอดเป็นเวลา 1 วินาทีหรือไม่? ฉันมีสิ่งUIImageViewที่ตอบสนองต่อเหตุการณ์แบบสัมผัส เมื่อตรวจพบการสัมผัสภาพเคลื่อนไหวบางอย่างเกิดขึ้นในแอพ หลังจากหนึ่งวินาทีฉันต้องการเรียกวิธีอื่น ในกรณีนี้ฉันไม่สามารถใช้animationDidStopตัวเลือกได้

13
เลย์เอาต์อัตโนมัติด้วย UIViews ที่ซ่อนอยู่หรือไม่
ฉันรู้สึกว่ามันเป็นกระบวนทัศน์ที่ใช้กันทั่วไปในการแสดง / ซ่อนUIViewsบ่อยที่สุดUILabelsขึ้นอยู่กับตรรกะทางธุรกิจ คำถามของฉันคือวิธีที่ดีที่สุดในการใช้ AutoLayout เพื่อตอบสนองต่อมุมมองที่ซ่อนอยู่ราวกับว่าเฟรมเป็น 0x0 นี่คือตัวอย่างของรายการแบบไดนามิกของคุณสมบัติ 1-3 ตอนนี้ฉันมีพื้นที่บน 10px จากปุ่มไปยังป้ายกำกับสุดท้ายซึ่งแน่นอนจะไม่เลื่อนขึ้นเมื่อมีการซ่อนป้ายกำกับ ณ ตอนนี้ฉันได้สร้างทางออกให้กับข้อ จำกัด นี้และแก้ไขค่าคงที่ตามจำนวนป้ายที่ฉันกำลังแสดง เห็นได้ชัดว่านี่เป็นเรื่องเล็กน้อยเนื่องจากฉันใช้ค่าคงที่ติดลบเพื่อกดปุ่มขึ้นไปบนเฟรมที่ซ่อนอยู่ มันก็ไม่ดีเช่นกันเพราะมันไม่ได้ถูก จำกัด ด้วยองค์ประกอบเลย์เอาต์ที่แท้จริงเพียงแค่การคำนวณแบบคงที่ซึ่งไม่น่าเชื่อตามความสูง / การซ้อนขององค์ประกอบอื่น ๆ และการต่อสู้กับสิ่งที่ AutoLayout สร้างขึ้น เห็นได้ชัดว่าฉันสามารถสร้างข้อ จำกัด ใหม่ ๆ ได้ขึ้นอยู่กับป้ายกำกับแบบไดนามิกของฉัน แต่นั่นเป็นเรื่องเล็กมากและการใช้คำฟุ่มเฟือยมากสำหรับการพยายามที่จะยุบช่องว่างบางส่วน มีแนวทางที่ดีกว่านี้ไหม? การเปลี่ยนขนาดเฟรม 0,0 และให้ AutoLayout ทำสิ่งนั้นโดยไม่มีการควบคุมข้อ จำกัด ? กำลังลบมุมมองออกทั้งหมดหรือไม่ แม้ว่าโดยสุจริตเพียงแค่ปรับเปลี่ยนค่าคงที่จากบริบทของมุมมองที่ซ่อนอยู่ต้องใช้รหัสบรรทัดเดียวพร้อมการคำนวณอย่างง่าย สร้างข้อ จำกัด ใหม่ด้วย constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:ดูเหมือนจะหนักมาก แก้ไขกุมภาพันธ์ 2018 : คำตอบดูเบนกับUIStackViews

12
วิธีกำจัดคำเตือน 'ตัวเลือกที่ไม่ได้ประกาศ'
ฉันต้องการใช้ตัวเลือกบนอินสแตนซ์ของ NSObject โดยไม่จำเป็นต้องใช้โปรโตคอลที่นำมาใช้ ตัวอย่างเช่นมีวิธีหมวดหมู่ที่ควรตั้งค่าคุณสมบัติข้อผิดพลาดหากอินสแตนซ์ NSObject ที่เรียกใช้สนับสนุน นี่คือรหัสและรหัสทำงานตามที่ตั้งใจไว้: if ([self respondsToSelector:@selector(setError:)]) { [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]]; } อย่างไรก็ตามคอมไพเลอร์ไม่เห็นวิธีการใด ๆ รอบ ๆ ด้วย setError: ลายเซ็นดังนั้นมันทำให้ฉันเตือนสำหรับแต่ละบรรทัดที่มี@selector(setError:)ตัวอย่าง: Undeclared selector 'setError:' ฉันไม่ต้องการประกาศโปรโตคอลเพื่อกำจัดคำเตือนนี้เพราะฉันไม่ต้องการให้ทุกคลาสที่สามารถใช้สิ่งนี้เพื่อใช้สิ่งพิเศษ เพียงแค่การประชุมฉันต้องการให้พวกเขามีsetError:วิธีการหรือทรัพย์สิน เป็นไปได้หรือไม่ อย่างไร? ไชโย สอี

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