Không thể tìm thấy bất kỳ thông tin nào cho lớp có tên là ViewContoder


154

Lỗi này đã khiến tôi phát điên khi tôi bắt đầu sử dụng Xcode (4.6.3). Bất cứ khi nào tôi cố gắng liên kết một mục Storyboard với mã của mình, tôi sẽ gặp lỗi:

Không thể tìm thấy bất kỳ thông tin nào cho lớp có tên ViewControll.

Điều này xảy ra với các lớp tùy chỉnh là tốt. Tôi đã thử các phương pháp như:

  • Xóa dữ liệu đại biểu.
  • Loại bỏ và thêm lại các lớp.
  • Khởi động lại Xcode.
  • Cài đặt lại Xcode.

Tôi không thể kéo ctrl để tạo kết nối trong bất kỳ dự án nào của mình cho dù lớp đó là gì. Vấn đề tương tự xảy ra với một ứng dụng mẫu hoàn toàn mới. Nếu tôi nhập mã theo cách thủ công và sau đó kéo ctrl, tôi có thể tạo kết nối hoạt động, nhưng tôi không thể tự động thêm mã. Không có gì tôi có thể tìm thấy cho đến nay trên Internet đã giúp. Bất kỳ con trỏ?


Bạn có chắc chắn rằng tập tin ViewContoder .m được bao gồm trong mục tiêu thích hợp không? (hộp kiểm trong bảng điều khiển thanh tra bên phải)
Alfie Hanssen

2
Bạn có một trình điều khiển khung nhìn trong bảng phân cảnh của mình và chỉ định "ViewContoder" cho tên của lớp sẽ được khởi tạo để quản lý khung nhìn. Kiểm tra từng bộ điều khiển chế độ xem trong bảng phân cảnh: chọn bộ điều khiển chế độ xem, xem "trình kiểm tra danh tính" trên khung bên phải và xem thuộc tính "Lớp tùy chỉnh". Nếu nó đọc "ViewContoder" thì có vấn đề của bạn. Đặt tên của lớp sẽ quản lý trình điều khiển khung nhìn của bạn ... hoặc đặt vào UIViewContoder để có được triển khai UIKit mặc định.
Nicholas Hart

1
Tôi đã thay đổi lớp tùy chỉnh thành "UIViewControll" trong trình kiểm tra danh tính và không còn có thể kéo ctrl từ bảng phân cảnh vào ViewContoder.h. Nếu tôi tạo một lớp mới và cố gắng kéo ctrl vào nó (sau khi đặt lớp của trình điều khiển khung nhìn phù hợp), tôi sẽ gặp lỗi "Không thể tìm thấy bất kỳ thông tin nào".
dùng2597451

4
Tôi đã gặp vấn đề này và sửa đổi lớp ViewContoder được tạo tự động làm việc cho tôi. Ví dụ như chỉ cần thêm một NSLog()đếnviewDidLoad:
jb

Câu trả lời:


292

Điều giải quyết vấn đề này cho tôi là thực sự xóa lớp khỏi dự án.

Các bước:

  1. Trong trình thám hiểm tệp dự án (bảng điều khiển bên trái) tìm lớp và nhấp chuột phải -> Xóa
  2. Xóa tham chiếu (không chuyển sang thùng rác vì bạn sẽ mất lớp tốt)
  3. Nhấp chuột phải vào thư mục chứa lớp -> Thêm tệp vào ...
  4. Tìm lớp bạn vừa xóa trong hệ thống tệp

Điều này dường như buộc Xcode liên kết lớp trở lại bảng phân cảnh.

Lưu ý: đối với tôi sau đây không hoạt động:

  • Đóng Xcode
  • Vệ sinh dự án
  • Xóa tên lớp khỏi bảng phân cảnh và nhập lại nó

Tôi nghĩ rằng đây là một lỗi trên phần của Apple


8
Tôi đã thử điều này, nhưng nó không hoạt động với tôi / -: cùng một lỗi.
Michael

1
@Michael, Vâng, bây giờ tôi đang ở trong tình huống không có cái nào ở trên hoạt động cả. Xcode là một ***
Chris Harrison

5
Vấn đề này bắt nguồn từ tháng 7 năm 2013, kể từ hôm nay tháng 5 năm 2016 tôi gặp lỗi tương tự và sửa nó bằng câu trả lời này. Làm thế nào trong nhiều năm qua Apple không sửa chữa nó cho tốt?
SkyWalker

3
Không thể tin rằng đây vẫn là một vấn đề. Chỉ cần thực hiện việc này trên XCode 8.1 ..
fisk

2
2017 (Phiên bản 8.2 (8C38)) và vẫn còn sống, Xcode SUCKS. Nó xảy ra với tôi khi bạn sao chép-dán nhân viên UI từ bảng phân cảnh từ cảnh này sang cảnh khác
Jaime Agudo

135

Trong trường hợp bất cứ ai vẫn còn nản lòng vì điều này, có một mẹo để khiến mọi thứ hoạt động.

Những gì tôi làm là nhập thủ công một ổ cắm vào lớp của tôi, ví dụ : @IBOutlet weak var someView: UIView!, và kéo từ mã đến dạng xem trong IB hoặc bảng phân cảnh. Sau này, tôi có thể kéo từ IB / Storyboard đến lớp của mình để tạo kết nối, trợ lý biên tập viên nhận ra lớp trong "Tự động", v.v ...

Hoạt động mọi lúc.


6
@ Gmeister4, nếu bạn tạo một ổ cắm trong mã của mình, nó sẽ hiển thị một vòng tròn nhỏ ở bên trái của ổ cắm. Nhấp và kéo từ vòng tròn đó vào chế độ xem trong IB hoặc Storyboard để tạo kết nối của bạn.
Andrew Robinson

4
Dễ dàng hơn câu trả lời hàng đầu. +1
cph2117

2
Vẫn không thể làm điều đó một cách thích hợp, ngay cả sau này - nhưng ít nhất thì nó cũng hoạt động!
Alexandre G

1
Không có câu trả lời nào ở trên làm việc cho tôi. Chỉ có câu trả lời này làm việc cho tôi.
coolcool1994

1
Tuyệt vời, chính là nó!
Sam

38

Đối với tôi, loại bỏ chúng khỏi tư cách thành viên mục tiêu của bạn ở cột bên phải và thêm chúng một lần nữa đã thực hiện thủ thuật nhập mô tả hình ảnh ở đây


Điều này cũng làm việc từ tôi. Tôi đã sao chép lớp ViewControll.swift và đây có vẻ là giải pháp.
UberJames

Tôi nghĩ đó là lỗi Xcode vẫn tồn tại trong Xcode 8.0
jiangjiefs

Điều này xảy ra ngay với tôi trong Xcode 8.3.3 và giải pháp của bạn là đơn giản và hiệu quả nhất. Cảm ơn!!!
RoberRM

Vẫn tồn tại trong Xcode 11.5 (ý tôi là nghiêm túc Apple ??). Chỉ có giải pháp làm việc cho tôi được liệt kê ở đây.
Barshe Fondacci

12

Đôi khi Xcode không hoạt động do VC không tham chiếu tệp lớp. Giải pháp đơn giản cho việc này là:

viết tài sản bằng tay như đã cho.

class YourClassName{

     @IBOutlet weak var YourTableName: UITableView!

}

Điều này sẽ tạo một dấu hiệu liên kết trống trước @IBOutlet , mở dự án của bạn trong trình chỉnh sửa trợ lý sau đó nhấp vào dấu hiệu liên kết nhập mô tả hình ảnh ở đâyvà kéo vào Chế độ xem mà bạn muốn kết nối (tôi đã kết nối với TableView). và đó là nó. Tận hưởng mã hóa hạnh phúc !!!


8

Tôi vừa gặp sự cố này vào tháng 4 năm 2017 với Xcode 8

Đơn giản chỉ cần tạo một ổ cắm thông qua mã và biên dịch cố định nó. ví dụ:

@IBOutlet weak var containerViewHeight: NSLayoutConstraint!

Bạn phải yêu Xcode,

Chỉnh sửa: Vẫn xảy ra trên Xcode 9


7

Các bước sau đây có hiệu quả với tôi, hy vọng nó cũng hiệu quả với bạn

1- Bạn cần mở lại dự án sau khi đóng Xcode.

2- Chờ lập chỉ mục các tệp dự án

3- Kiểm tra xem nó có hoạt động hay không

4 - Nếu vẫn không làm việc theo bước 5, nếu không vui cho bạn :)

5- Làm sạch và xây dựng mục tiêu dự án của bạn

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


7

Tôi đã thử mọi cách và nó không hoạt động, vì vậy đối với tôi, điều làm việc là:

  • Làm sạch thư mục và dự án.
  • Mở dự án (Cửa sổ -> Dự án)
  • Tìm dự án của bạn trong danh sách và xóa Dữ liệu phái sinh
  • Đóng Xcode
  • Khởi động lại máy tính (không chọn mở lại các cửa sổ đang mở)
  • chạy Xcode
  • Công việc!

Tất cả các bộ điều khiển xem của tôi không được công nhận, vì vậy xóa tất cả các tệp và thêm lại không phải là một tùy chọn vì đây là một dự án lớn.


4

Đối với tôi, sau đây làm việc:

  1. Thực hiện 'sạch' và 'thư mục bản dựng sạch' (nhấn 'tùy chọn' trên menu Sản phẩm để nhận lệnh 'thư mục bản dựng sạch'

  2. Dừng Xcode

  3. Trong thiết bị đầu cuối, đi đến thư mục dữ liệu dẫn xuất:

    (/ Người dùng // Thư viện / Nhà phát triển / Xcode / DeruredData)

Xóa thư mục dữ liệu dẫn xuất cho dự án của bạn.

  1. Gà chết sóng

  2. Bắt đầu Xcode


3

Tôi đã phải làm một sự kết hợp của một vài câu trả lời cho đến nay:

  1. Xóa tên lớp tùy chỉnh khỏi bảng phân cảnh.

(Nhấp vào nút màu vàng ở trên cùng bên trái của trình điều khiển chế độ xem trong bảng phân cảnh -> đi đến trình kiểm tra danh tính (tùy chọn + lệnh + 3) -> xóa tên lớp tùy chỉnh ở trên cùng)

  1. Xóa tham chiếu đến tệp điều khiển xem.

(Nhấp chuột phải vào tệp -> xóa -> xóa tham chiếu)

  1. Thêm tập tin điều khiển xem trở lại dự án.

(Nhấp chuột phải vào thư mục chứa tệp -> "Thêm tệp vào [dự án]")

  1. Thêm tên lớp tùy chỉnh trở lại bảng phân cảnh.

3

Nếu mọi người thử những điều trên và mọi thứ vẫn không hoạt động, thì mẹo lạ đối với tôi là thêm ổ cắm vào một khoảng trắng. Nó hoạt động nếu không có dòng nào khác trực tiếp bên trên hoặc bên dưới dòng bạn đang thêm. Lạ, nhưng nó đã làm việc!


3

Điều làm việc cho tôi là, thay vì kéo kết nối từ nút vào mã, là:

  1. Nhấp vào mục cốt truyện mong muốn.
  2. Mở thanh tra kết nối (bảng bên phải)
  3. Kéo từ vòng tròn + vào vùng mã. Thích như vậy:

sau khi tôi liên kết mã của mình theo cách này, nó hoạt động bình thường từ sau đó.


3

Ở lại mục tiêu!

Tôi đã thêm một lớp mới với Xib và tôi bắt đầu thấy vấn đề này và tôi đã dành thời gian để xem qua các câu trả lời ở đây và xem liệu có bất kỳ điều gì làm nên sự khác biệt với nó không.

Khi điều đó xảy ra, tôi có nhiều mục tiêu trong không gian làm việc của mình và tôi thường phải chuyển đổi giữa chúng.

Hóa ra việc thêm các tệp mới sẽ khởi động một chỉ mục lại trong Xcode. Nhưng nếu bạn đang chỉ vào mục tiêu sai thì việc lập chỉ mục có thể là vô nghĩa và trong quá trình kéo để kết nối Xcode sẽ không thể tìm thấy lớp của bạn.

Nói ngắn gọn

Bước 1.

Chọn mục tiêu

Hãy chắc chắn rằng bạn có bộ mục tiêu chính xác để việc lập chỉ mục có ý nghĩa.


3

Điều này làm việc cho tôi:

  1. Thực hiện ' Làm sạch thư mục xây dựng '
    (nhấn và giữ phím 'tùy chọn' và chuyển đến menu " Sản phẩm " để truy cập.
  2. Thực hiện "Sạch" đơn giản (CMD-SHIFT-K) từ " Sản phẩm menu " ".
  3. Xây dựng dự án để cho Xcode biên dịch các tệp. Ngoài ra, hãy để nó lập chỉ mục các tập tin nếu cần thiết.

Bên cạnh đó, tôi không chắc liệu điều này có giúp ích không nhưng tôi cũng đã xóa dữ liệu Đã tạo trước khi thực hiện các bước trên (tùy chọn Xcode> Vị trí)


2

Chọn ViewContoder trong StoryBoard, xóa giá trị hiện tại trong Bảng điều khiển bên phải / "Lớp khách hàng" / "lớp" sau đó thêm lại lớp điều khiển (loại: "SampleViewControll" ...), nhập. -> Công việc đó đối với tôi


2

Tôi đã thử tất cả các câu trả lời này, vấn đề đối với tôi liên quan đến việc Xcode không thể lập chỉ mục các tệp. Tôi đã sửa lỗi này bằng cách thoát Xcode và mở lại dự án. Tất nhiên tôi đã làm điều đó sau khi thử tất cả các giải pháp trên: p



2

Đây là bước DỄ DÀNG nhất mà tôi đã làm để khắc phục vấn đề này.

  1. Tôi làm sạch dự án
  2. Kéo một nút mới trong trình điều khiển xem.
  3. Xây dựng dự án.
  4. Kết nối nút vừa được kéo vào lớp (ổ cắm hoặc hành động).
  5. Thì thì đấy !!! Các cửa hàng khác bây giờ có thể được kết nối với lớp một lần nữa!

1

Theo kinh nghiệm thử nghiệm của tôi, nếu bạn xóa một lớp được liên kết trong Xcode và thêm lại tệp, thì vấn đề này sẽ xảy ra.


1

Thông thường khi điều này xảy ra với tôi, tôi chưa lưu mã cho lớp. Chỉ cần nhảy qua mã và nhấn cmd + s và nó thường khắc phục vấn đề đúng cách.



1

Không có bước nào ở trên làm việc cho tôi, nhưng tôi nghĩ rằng tôi có thể đã phát hiện ra vấn đề. Ít nhất đó là những gì làm việc cho tôi, và nó không phải là một lỗi trong Xcode.

Khi trong trình chỉnh sửa trợ lý, hãy nhìn vào phía trên cùng của cửa sổ có mã cho viewContoder của bạn. Tùy chọn thứ ba từ bên phải có khả năng nói "Thủ công", nhưng nó sẽ nói "Tự động". Khi tôi thay đổi điều này, vấn đề đã được giải quyết!


1

Tôi đã gặp một vấn đề tương tự, "Không thể tìm thấy một lớp có tên ..." và nguyên nhân là do tôi ngu ngốc khi tôi phát hiện ra nó. Đảm bảo bạn không kéo từ mục vào giao diện - đảm bảo rằng nó được kéo vào chính lớp


1

Tôi đã thử MỌI THỨ!

Đảm bảo tên lớp của UIViewControll của bạn không chứa từ "Kiểm tra"

Báo cáo lỗi được gửi.


Chắc chắn không nói rằng đây là nguyên nhân duy nhất. Chỉ cần đây là một điều cần phải nhận thức.
Aaron Kreipe

Giúp tôi xóa tất cả dữ liệu dẫn xuất, làm sạch dự án. Nhưng đây là lỗi và bạn đã đúng.
Genevios

0

Tôi sẽ cố gắng làm lại các tệp .m và .h trong câu hỏi và đặt cho chúng một tên gốc, không chung chung như "ViewContoder". Hãy thử một cái gì đó nhiều hơn dọc theo dòng của những gì bạn muốn tệp đó làm và kết thúc trong Trình điều khiển xem (tức là "PizzaDecoraterViewCont kiểm")

Sau đó chọn ViewContoder mà bạn muốn kết nối với các tệp đó. Hãy chắc chắn rằng bạn chọn ViewContoder, không chỉ là một đối tượng bên trong. Nhấp vào thanh màu đen ở dưới cùng (thanh có biểu tượng "Phản hồi đầu tiên" và "Thoát"). Toàn bộ ViewContoder sẽ phác thảo màu xanh lam. Sau đó, đi đến phần Lớp tùy chỉnh trong Trình kiểm tra danh tính và bạn sẽ thấy một "UIViewContoder" màu xám trong trường đầu tiên. Trong trường đó, nhập tên của tệp .h hoặc .m mà bạn muốn nó kết nối với (Bắt đầu nhập PizzaDecorator ... và nó sẽ thực hiện một điều tự động hoàn thành một chút). Sau đó nhấn ENTER.

Khi bạn mở Trình chỉnh sửa trợ lý, hãy đảm bảo rằng tệp mà bạn đang cố gắng kéo và thả vào thực tế là tệp chính xác.

Nếu bạn đã làm tất cả như đã nói ở trên, thì nó sẽ hoạt động.


Thật không may, vẫn không làm việc. Tôi đã cố gắng làm điều này trước đây nhưng không có kết quả. Đây là một ảnh chụp màn hình: i.imgur.com/5ixtcps.png
user2597451

Huh. Lạ thật. Hãy thử thêm chúng vào chương trình (ví dụ: @property (không gây dị ứng, mạnh) thử nghiệm IBOutlet UIView *;) và sau đó khi vòng tròn nhỏ xuất hiện bên cạnh, hãy kéo và thả vào UIView của bạn.
CaptJak

Điều đó hoạt động và luôn luôn có (và các ứng dụng dường như chạy ổn), nhưng tôi đang cố gắng giải quyết vấn đề mà nó sẽ không tự động thêm vào.
dùng2597451

Chà, nếu nó hoạt động như vậy, thì nó nên hoạt động theo cách khác. Lỗi trong XCode của bạn? Hãy thử lấy phiên bản trước (như 4.6.2 hoặc thứ gì đó) và cài đặt phiên bản đó. Nếu không, ummmmmmmmmmmmmmm ...... yeah ....
CaptJak

Vâng, đó là những gì tôi sợ. Gỡ cài đặt và cài đặt lại không hoạt động, tôi đã hy vọng mình đã phạm sai lầm. Cách tốt nhất để hạ cấp bản sao Xcode của tôi là gì?
dùng2597451

0

Như tôi đã nhận xét về câu trả lời của @ ChrisHarrison, những điều đó không hiệu quả với tôi, nhưng xóa dữ liệu dẫn xuất như tôi đã làm cho nó hoạt động bằng cách xóa dữ liệu dẫn xuất như trong https://stackoverflow.com/a/16182672/1449799


0

Xóa các tệp (chỉ các tài liệu tham khảo) và thêm các tệp một lần nữa.


0

Trong trường hợp của tôi, điều làm việc (đó là một sự kỳ lạ, nhưng hiệu quả) là như sau:

Hãy thử thêm một nguồn dữ liệu (ví dụ: một phần mở rộng cho ViewContoder như UITableViewDataSource). Xcode sẽ cố tải lại ViewContoder. Sau đó, tôi đã viết một số phương thức của giao thức (lúc đầu Xcode không tự động hoàn thành các phương thức, nhưng đã viết nó bằng tay), sau đó tôi đã thêm IBOutlets, và cuối cùng, tôi đã xóa nguồn dữ liệu.

Thí dụ:

class TestViewController:UIViewController{
    // This viewController presents “Could not find any information for  class named ViewController”
}

extension TestViewController:UITableViewDataSource{
    //Add Some methods of the protocol, Xcode will try to autocomplete and then it's going to reload the class, from then you can add your IBOulets / Actions .. And remove this extension if you don't need it otherwise.
}

0

Đối với tôi, khung nhìn mà tôi đã chỉ định một lớp tùy chỉnh cho việc không được biên dịch bởi trình xây dựng giao diện. Nó đã được đánh dấu@IBDesignable .

Xóa @IBDesignable, và sau đó thêm các cửa hàng của tôi, và sau đó đánh dấu nó là @IBDesignablegiải quyết vấn đề trong trường hợp của tôi.


0

Chỉ cần cố gắng xóa dữ liệu phái sinh cho dự án


0

cứ thử đi

rm -rf ~/Library/Caches/com.apple.dt.Xcode
defaults delete com.apple.dt.Xcode IDEIndexDisable
defaults write com.apple.dt.Xcode IDEIndexEnable 1 
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.