คำเตือนสตอรีบอร์ด: เซลล์ตารางต้นแบบต้องมีตัวระบุที่ใช้ซ้ำ


123

ฉันได้รับคำเตือนนี้จากสตอรีบอร์ด - เซลล์ตารางต้นแบบต้องมีตัวระบุที่ใช้ซ้ำ

ฉันได้เปลี่ยนชื่อตัวระบุในตัวตรวจสอบแอตทริบิวต์ แต่ดูเหมือนว่าจะไม่ได้ลบคำเตือนออกไป

ข้อเสนอแนะใด ๆ ?


คุณกรอกข้อมูลผิดช่องหรือมีมุมมองตารางมากกว่าหนึ่งรายการ คุณสามารถโพสต์ภาพหน้าจอของตัวตรวจสอบแอตทริบิวต์ได้หรือไม่
jrturton

3
ตอนนี้เพื่อนก็โอเค ฉันได้พบวิธีแก้ปัญหาแล้ว ค่าสำหรับ Identifier ควรเหมือนกับ reuse identifier :)
K. ฮอนด้า

คุณได้กำหนดตัวระบุสำหรับทุกเซลล์แล้วหรือยัง?
Mick MacCallum

สวัสดีฮอนด้า! คุณช่วยบอกฉันได้ไหมว่าคุณทำอะไรเพราะฉันได้รับข้อผิดพลาดเดียวกัน
Varun Mehta

2
ฉันสังเกตเห็นว่าบางครั้ง (ปัจจุบันใช้ Xcode 5 Beta 5 (5B103i) ล่าสุด) ไฮไลต์ตำแหน่งที่ไม่ถูกต้องของข้อผิดพลาด / คำเตือนในกระดานเรื่องราว ดังนั้นหากคุณคลิกที่คำเตือนบางครั้งจะแสดงตำแหน่งที่ไม่ถูกต้องซึ่งคำเตือนที่คล้ายกันได้รับการแก้ไขแล้ว ฉันขอแนะนำให้ลองดู tableview ใด ๆ ที่คุณมีในสตอรีบอร์ดของคุณด้วยตนเองและตรวจสอบว่ามีเซลล์อื่นที่ไม่มีตัวระบุหรือไม่ ด้านบนแก้ไขปัญหาของฉันด้วยคำเตือนนี้ ขอบคุณ @ K. ฮอนด้าที่ถามคำถามเนื่องจากหัวข้อนี้ช่วยให้ฉันเข้าใจวิธีแก้ไขปัญหา
Justas

คำตอบ:


159

ในการปิดคำเตือนคุณต้องตั้งชื่อให้กับตัวระบุเซลล์:

ใส่คำอธิบายภาพที่นี่


14
มีความสุขกับฉันไป ปิด xcode - เปิดแล้วเปลี่ยนรหัส
Idan Magled

7
เมื่อคำเตือนยังคงอยู่หมายความว่าบางแห่งใน StoryBoard ของคุณยังมีเซลล์ที่ไม่มีตัวระบุอยู่
saimonx

หากคุณมีเซลล์ต้นแบบมากกว่า 1 เซลล์คุณต้องให้ตัวบ่งชี้ทั้งหมดไม่เช่นนั้นก็ตั้งค่าตัวเลขเป็นหนึ่งในเซลล์ต้นแบบ
user1700737

6
ฉันต้องลบโฟลเดอร์ Derived Data (Xcode เทียบเท่ากับ Windows Reboot) และสร้างใหม่เพื่อกำจัดคำเตือนปลอมนี้
Michael McGuire

สิ่งนี้ใช้ได้ผลสำหรับฉัน: ปิด Xcode เปิด / Users / ชื่อผู้ใช้ / Library / Developer / Xcode / DerivedData ใน Finder และลบเนื้อหาทั้งหมด (ไม่ใช่โฟลเดอร์ DerivedData เอง)
dldnh

18

อีกวิธีหนึ่งคือการตั้งค่าคุณสมบัติ 'เซลล์ต้นแบบ' ของมุมมองตารางเป็นศูนย์ใน Attributes Inspector หากคุณกำลังกำหนดเซลล์โดยใช้. xib ตามโปรแกรม

การตั้งค่าเซลล์ต้นแบบเป็น 0 ใน Attributes Inspector


9

เนื่องจากสตอรีบอร์ดเป็นไฟล์ XML จริง ๆ ดังนั้นเคล็ดลับอีกประการหนึ่งคือการเปิดสตอรีบอร์ดของคุณด้วยโปรแกรมแก้ไขข้อความใด ๆ (ไม่ใช่ Xcode!) และพยายามค้นหาโหนด tableViewCell ทั้งหมด ตัวอย่างเช่นกดCMD + Fพิมพ์<tableViewCell contentMode="scaleToFill"และกด Enter คุณอาจจะพบว่าแถวเดียวกันกับแถวนี้:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

โปรดให้ความreuseIdentifier="GenericCellID"สำคัญกับค่าคีย์ แถวที่เริ่มการเตือน (โดยไม่ใช้ตัวระบุซ้ำ) จะไม่มีค่าคีย์ดังกล่าว ดูโหนดด้านบนในโปรแกรมแก้ไขข้อความของคุณและคุณจะเห็นtableViewControllerโหนดที่มีชื่อคลาสที่คุณต้องตรวจสอบในตัวแก้ไขสตอรีบอร์ดของ Xcode และแก้ไขตามคำตอบของ aleroot '


1
คุณสามารถเปิดสตอรีบอร์ดของคุณเป็นโค้ดด้วย Xcode ได้โดยทำ CTRL + คลิกที่ไฟล์สตอรีบอร์ดOpen As>>Source Code
NSTJ

4

หากคำเตือน Xcode ของคุณยังคงไม่หายไปแม้ว่าคุณจะตั้งค่า reuseIdentifier แล้วให้ลองใช้เมนู "ผลิตภัณฑ์ -> ทำความสะอาด" สิ่งนี้ช่วยฉันได้และหลังจากนั้นคำเตือนก็ไม่ปรากฏขึ้นอีก


2

เนื่องจากการคลิกสองครั้งที่คำเตือนนี้อาจนำไปสู่การไล่ล่าห่านป่า (UITableViewCell เฉพาะไม่ได้รับการเลือก) เพียงแค่ต้องการเพิ่มว่าในขณะที่คำเตือนเหล่านี้บางส่วนจะแก้ไขโดยอัตโนมัติ แต่บางส่วนจะไม่แก้ไข

หากคุณมั่นใจว่าได้ติดแท็กเซลล์ทั้งหมดของคุณใน Storyboard แล้วให้สร้างโปรเจ็กต์ใหม่ - คำเตือนของคุณอาจหายไป (เช่นเดียวกับของฉัน)


2

แมรี่ลูกเห็บ: การรีสตาร์ท XCode ใช้งานได้สำหรับฉัน (แต่อาจเป็นเพียงการสร้างด้วยตนเองที่จำเป็น)


1

ฉันได้รับคำเตือนนี้สำหรับ Xcode 7 ฉันกำลังทำงานกับ Swift ฉันไม่ได้เพิ่มตัวควบคุมการนำทางสำหรับตัวควบคุมมุมมองเริ่มต้น เมื่อฉันทำเช่นนั้น .. ฉันได้รับคำเตือนนี้จาก StoryBoard สิ่งที่ฉันทำคือ:

  1. มีสองเซ็กส์
    1. จาก Navigation Controller ไปจนถึง Root view Controller และ
    2. จากตัวควบคุม Root View ไปยังตัวควบคุม View เริ่มต้นของคุณ
  2. เลือกตัวควบคุมที่เชื่อมต่อตัวควบคุมมุมมองรูทกับตัวควบคุมมุมมองเริ่มต้น
  3. ตั้งชื่อตัวระบุ
  4. เลือกส่วนที่เขียน "Prototype" ของคอนโทรลเลอร์ -> ที่นั่นคุณจะเห็นตัวระบุเป็นตัวเลือก
  5. วางชื่อเดียวกันของตัวระบุที่ป้อนก่อนหน้านี้

คำเตือนไป .. ถ้าไม่ทำความสะอาด sdk :)


1

ให้แน่ใจว่าคุณได้รับการตั้งค่าการใช้ซ้ำ Identifierบนวัตถุมากกว่าID ฟื้นฟู ทั้งสองอย่างมีอยู่ในสตอรีบอร์ดและสับสนได้ง่าย

ในไฟล์ XML กระดานที่คุณจะต้องการที่จะได้รับการตั้งค่าไม่ได้reuseIdentifierrestorationIdentifier


0

ฉันพบว่าข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณมีเซลล์ต้นแบบหลาย ๆ (ในคุณสมบัติของ tableview) และยังไม่ได้ให้ทั้งหมดของพวกเขากลับมาใช้ตัวบ่งชี้


ฉันเคยเห็นสิ่งนี้เช่นกันมีวิธีตั้งชื่อเซลล์ทั้งหมดพร้อมกันหรือมีวิธีอื่นในการลบคำเตือนเหล่านี้หรือไม่?
CatsLoveJazz

1
เซลล์ Prototye ทุกเซลล์ต้องการชื่อเฉพาะของตัวเอง ดังนั้นไม่มีทางที่จะทำโดยอัตโนมัติ
Vincent

0

ตัวระบุคือชื่อที่คุณอ้างถึงในไฟล์. m ของคุณ เมื่อไม่ได้เติมเต็มจะไม่สามารถอ้างอิงเซลล์ได้


0

สิ่งนี้สำหรับการตั้งค่าตัวระบุการใช้ซ้ำโดยทางโปรแกรม

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

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