Cảnh báo bảng phân cảnh: các ô bảng nguyên mẫu phải có định danh tái sử dụng


123

Tôi nhận được cảnh báo này từ bảng phân cảnh - các ô bảng nguyên mẫu phải có các định danh tái sử dụng.

Tôi đã đổi tên định danh trong trình kiểm tra thuộc tính nhưng dường như nó không xóa cảnh báo.

Bất kỳ đề xuất?


Bạn đã điền sai trường hoặc bạn có nhiều hơn một chế độ xem bảng. Bạn có thể đăng một ảnh chụp màn hình của thanh tra thuộc tính?
jrturton

3
Bây giờ là bạn đời. Tôi đã tìm thấy một giải pháp. Giá trị cho Mã định danh phải giống như định danh tái sử dụng. :)
K.Honda

Bạn đã đặt một định danh cho mọi ô chưa?
Mick MacCallum

Chào Honda! Bạn có thể vui lòng cho tôi biết những gì bạn đã làm bởi vì tôi đang nhận được cùng một lỗi.
Varun Mehta

2
Tôi đã nhận thấy rằng đôi khi (hiện đang sử dụng Xcode 5 Beta 5 (5B103i)) mới nhất làm nổi bật các vị trí sai của cảnh báo / cảnh báo trong bảng phân cảnh. Vì vậy, nếu bạn nhấp vào cảnh báo, đôi khi nó sẽ hiển thị sai vị trí nơi cảnh báo tương tự có thể đã được sửa. Tôi khuyên bạn nên tự mình đi qua bất kỳ bảng xem nào bạn có trong bảng phân cảnh của mình và kiểm tra xem có bất kỳ ô nào khác có mã định danh bị thiếu không. Ở trên đã giải quyết vấn đề của tôi với cảnh báo này. Cảm ơn @ K.Honda đã đặt câu hỏi vì chủ đề này đã giúp tôi hiểu cách khắc phục vấn đề.
Justas

Câu trả lời:


159

Để tắt cảnh báo, bạn phải đặt tên cho mã định danh ô:

nhập mô tả hình ảnh ở đây


14
hạnh phúc với tôi đóng xcode - mở nó và sau đó thay đổi định danh
Idan Magled

7
Khi cảnh báo vẫn còn có nghĩa là ở đâu đó trong StoryBoard của bạn vẫn còn một ô không có mã định danh
saimonx

Nếu bạn có nhiều hơn 1 ô nguyên mẫu, bạn phải cung cấp cho chúng tất cả một bộ xác định, nếu không, chỉ cần đặt số thành một trong ô nguyên mẫu
user1700737

6
Tôi đã phải xóa thư mục Dữ liệu đã tạo (Xcode tương đương với Windows Reboot) và xây dựng lại để thoát khỏi cảnh báo giả mạo này.
Michael McGuire

Điều này làm việc với tôi: đóng Xcode, mở / Người dùng / tên người dùng / Thư viện / Nhà phát triển / Xcode / DeruredData trong Finder và xóa tất cả nội dung của nó (không phải chính thư mục DeruredData).
dldnh

18

Một cách khác là đặt thuộc tính 'Prototype Cell' của Chế độ xem bảng thành 0 trong Trình theo dõi thuộc tính, nếu bạn đang xác định ô bằng cách sử dụng .xib theo chương trình.

Đặt các ô nguyên mẫu thành 0 trong Trình theo dõi thuộc tính


9

Vì bảng phân cảnh thực sự là tệp XML, do đó, một mẹo khác là mở bảng phân cảnh của bạn bằng bất kỳ trình soạn thảo văn bản nào (không phải Xcode!) Và cố gắng tìm tất cả các nút tableViewCell. Ví dụ, nhấn CMD + F , nhập <tableViewCell contentMode="scaleToFill"và nhấn Enter. Bạn có thể sẽ tìm ra, các hàng tương tự như thế này:

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

Hãy chú ý đến reuseIdentifier="GenericCellID"giá trị chính. Các hàng kích hoạt cảnh báo (không có định danh tái sử dụng) sẽ không có giá trị khóa như vậy. Nhìn vào các nút ở trên trong trình soạn thảo văn bản của bạn và bạn sẽ thấy tableViewControllernút có tên lớp bạn cần kiểm tra trong trình chỉnh sửa bảng phân cảnh của Xcode và sửa lỗi, theo câu trả lời của aleroot.


1
Bạn thực sự có thể mở bảng phân cảnh của mình dưới dạng mã bằng Xcode bằng cách thực hiện CTRL + nhấp vào tệp bảng phân cảnh của bạn Open As>>Source Code
NSTJ

4

Nếu cảnh báo Xcode của bạn vẫn không biến mất ngay cả sau khi bạn đã đặt reuseIdentifier, hãy thử Menu "Sản phẩm -> Làm sạch". Điều này giúp ích cho tôi và sau đó, cảnh báo đã không xuất hiện nữa.


2

Vì nhấp đúp vào cảnh báo này có thể dẫn đến một chút đuổi theo ngông cuồng (UITableViewCell cụ thể không được chọn), chỉ muốn thêm rằng trong khi một số cảnh báo này sẽ tự động giải quyết, một số cảnh báo sẽ không tự động giải quyết, một số cảnh báo sẽ không tự động giải quyết .

Nếu bạn tự tin rằng bạn đã gắn thẻ tất cả các ô của mình trong Storyboard, hãy xây dựng lại dự án - cảnh báo của bạn có thể biến mất (cũng như của tôi).


2

Một mary mưa đá: khởi động lại XCode làm việc cho tôi (nhưng có lẽ nó chỉ là một bản dựng lại thủ công được yêu cầu).


1

Tôi đã nhận được cảnh báo này cho Xcode 7. Tôi đang làm việc với Swift. Tôi đã không thêm bộ điều khiển điều hướng cho bộ điều khiển xem ban đầu. Khi tôi làm như vậy .. tôi đã nhận được cảnh báo này từ StoryBoard. Những gì tôi đã làm là:

  1. Có hai sự khác biệt
    1. từ Bộ điều khiển Điều hướng đến Bộ điều khiển xem gốc và
    2. từ bộ điều khiển Root View đến bộ điều khiển View ban đầu của bạn.
  2. Chọn segue kết nối bộ điều khiển xem gốc với bộ điều khiển xem ban đầu.
  3. Đặt tên cho định danh
  4. Chọn phần được viết "Nguyên mẫu" của bộ điều khiển -> ở đó bạn sẽ thấy định danh là một tùy chọn.
  5. Dán cùng tên của mã định danh như đã nhập trước đó.

Cảnh báo đi .. nếu không làm sạch sdk :)


1

Hãy chắc chắn rằng bạn đang đặt Mã định danh tái sử dụng trên đối tượng, thay vì ID khôi phục . Cả hai đều có sẵn thông qua bảng phân cảnh, và dễ nhầm lẫn.

Trong tệp XML bảng phân cảnh, bạn sẽ muốn được đặt reuseIdentifier, không restorationIdentifier.


0

Tôi đã nhận thấy rằng lỗi này xảy ra khi bạn có nhiều ô nguyên mẫu (trong thuộc tính xem bảng) và chưa cho tất cả chúng sử dụng lại định danh.


Tôi cũng đã thấy điều này, có cách nào để đặt tên cho tất cả các ô cùng một lúc hay có cách nào khác để loại bỏ các cảnh báo này không?
MèoLoveJazz

1
Mỗi tế bào Prototye cần nó có tên riêng. Vì vậy, không có cách nào để làm điều đó một cách tự động
Vincent

0

Mã định danh là tên bạn đề cập đến trong tệp .m của bạn. Khi nó không được điền thì không thể tham chiếu ô.


0

Điều này để thiết lập định danh tái sử dụng theo chương trình

-(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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.