Lớp không xác định của My <MyClass> trong tệp Trình tạo giao diện Lỗi khi chạy


260

Mặc dù Interface Builder nhận thức được a MyClass, tôi vẫn gặp lỗi khi khởi động ứng dụng.

Điều này xảy ra khi MyClasslà một phần của thư viện và không xảy ra nếu tôi biên dịch lớp trực tiếp trong mục tiêu ứng dụng.


Làm thế nào để bạn liên kết với thư viện?
Elise van Looij

Tôi sử dụng một tiểu dự án phụ thuộc và thực hiện thao tác kéo từ các sản phẩm của tiểu dự án Xcode vào giai đoạn xây dựng "Liên kết nhị phân với thư viện" của mục tiêu hiện tại của tôi.
jhoule

Nếu lớp học là từ CocoaPods, điều này có thể giúp github.com/CocoaPods/CocoaPods/issues/491 .
Protocole

Câu trả lời:


222

Mặc dù có lỗi " Lớp MyClass không xác định trong tệp Trình tạo giao diện. " Được in khi chạy, nhưng vấn đề này không liên quan gì đến Trình tạo giao diện, mà là với trình liên kết, không liên kết một lớp vì không có mã nào sử dụng trực tiếp.

Khi dữ liệu .nib (được biên dịch từ .xib) được tải khi chạy, MyClassđược tham chiếu bằng chuỗi, nhưng trình liên kết không phân tích chức năng mã, chỉ tồn tại mã, vì vậy nó không biết điều đó. Vì không có tệp nguồn nào khác tham chiếu lớp đó, trình liên kết tối ưu hóa nó khỏi sự tồn tại khi thực hiện. Vì vậy, khi mã của Apple cố gắng tải một lớp như vậy, nó không thể tìm thấy mã được liên kết với nó và in cảnh báo.

Theo mặc định, các mục tiêu Objective-C sẽ có các -all_load -ObjCcờ được đặt theo mặc định, sẽ giữ tất cả các biểu tượng. Nhưng tôi đã bắt đầu với một mục tiêu C ++ và không có điều đó. Tuy nhiên, tôi đã tìm ra một cách xung quanh điều này, giúp cho trình liên kết tích cực.

Bản hack mà tôi đang sử dụng ban đầu là thêm một thói quen tĩnh như sau:

+(void)_keepAtLinkTime;

không có gì, nhưng tôi sẽ gọi một lần, chẳng hạn như:

int main( int argc, char** argv )
{
   [MyClass _keepAtLinkTime];
   // Your code.
}

Điều này sẽ buộc trình liên kết giữ toàn bộ lớp và lỗi sẽ biến mất.

Như jlstrecker đã chỉ ra trong các bình luận, chúng tôi không thực sự cần thêm một _keepAtLinkTimephương thức. Chỉ cần gọi một cái hiện có, chẳng hạn như:

   [MyClass class];

thực hiện các mẹo (miễn là bạn xuất phát từ một NSObject).

Tất nhiên, bạn có thể gọi đây là bất kỳ vị trí nào trong mã của bạn. Tôi đoán nó thậm chí có thể là mã không thể truy cập. Ý tưởng là đánh lừa người liên kết nghĩ rằng nó MyClassđược sử dụng ở đâu đó để nó không quá tích cực trong việc tối ưu hóa nó.

Xcode 6.3.2 & Swift 1.2

Định nghĩa nhanh về quan điểm. Hãy chắc chắn để ghi đè init(coder aDecoder: NSCoder). Định nghĩa Objective-C của bộ điều khiển xem. Và, một ngòi trong cây lê.

Thêm Tên Mô-đun vào thanh tra chi tiết Nib nơi bạn chọn lớp.


2
Dữ liệu .xib không được tải khi chạy. Trình biên dịch IB biên dịch xib thành ngòi; ngòi là những gì được tải vào thời gian chạy.
Peter Hosey

19
Bạn không phải sửa đổi MyClass. Chỉ cần gọi một phương thức mà nó kế thừa từ NSObject, như +class.
jlstrecker

10
Mặc dù đó không phải là Xcode 4 khi câu hỏi ban đầu được đăng, nhưng những điều sau đây dường như vẫn phù hợp. Trong Xcode 4 thay vì thêm một số phương thức giả để loại bỏ lỗi, bạn có thể kiểm tra tất cả các mục tiêu cần thiết MyClass.mtrong phần Thành viên mục tiêu của Trình kiểm tra tệp.
adubr

51
Một khả năng khác hiện nay là MyClass.m có thể không ở trong giai đoạn xây dựng Nguồn biên dịch của bạn. Điều này có thể xảy ra nếu bạn kéo MyClass.h / m vào dự án của mình, thay vì tạo chúng bằng Tệp mới.
Steven Fisher

6
@JoshBruce bạn có thể giải thích giải pháp Swift? Tôi không thực sự hiểu nó.
Ryan Bobrowski

183

Tôi đã sửa lỗi này theo dòng những gì Laura đề xuất nhưng tôi không cần tạo lại các tập tin.

  • Sử dụng XCode 4, trong Trình điều hướng dự án , chọn tệp .m chứa lớp mà nó đang phàn nàn về

  • Đi đến Xem-> Tiện ích-> Hiển thị Trình kiểm tra tệp
    (phần này sẽ hiển thị Trình kiểm tra tệp ở bên phải, với thông tin .m-file đó)

  • Mở phần Thành viên mục tiêu và đảm bảo rằng mục tiêu của bạn được chọn cho tệp .m này

Khi tôi thêm tệp .m của mình vào dự án của mình, nó đã không thêm nó vào mục tiêu mặc định của tôi vì một số lý do và điều đó khiến tôi gặp phải lỗi mà bạn đã đề cập.


Có một sự thật là đôi khi, lỗi liên kết là do đơn giản là không biên dịch tệp của bạn trong mục tiêu của bạn ở vị trí đầu tiên. Những gì bạn mô tả là cách để kiểm soát (các) mục tiêu mà một tệp được liên kết đến. Thật không may, tập tin của tôi đã là một phần của mục tiêu của tôi, nhưng tôi vẫn gặp sự cố liên kết. Điều này có lẽ là do thư viện của tôi là C ++ (trái ngược với Objective-C), có các cờ liên kết mặc định khác nhau (xem bài đăng của Alasdair Allan và Sijo ở trên).
jhoule

5
Đề xuất này có hiệu quả với tôi, mặc dù hơi khác một chút, vì hộp kiểm "Tư cách thành viên mục tiêu" của tôi đã được chọn. Tôi đã bỏ chọn nó và xây dựng lại, nhưng sau đó thông báo lỗi đã thay đổi để chỉ ra tên lớp mới của tôi. Kiểm tra lại hộp và xây dựng lại, mọi thứ bây giờ hoạt động. Dễ dàng hơn nhiều so với việc xóa các tập tin bộ nhớ cache!
nam châm điện

Giải pháp tuyệt vời thông qua Xcode UI. @elect Magnetgot, Xcode có thể bị lẫn lộn khi bạn thêm các lớp theo cách thủ công, vì vậy bạn có thể cần thêm nhiều hơn một tệp.
Gonen

Đây là giải pháp cho tôi là tốt. Tôi đã kéo vào một số tệp lớp từ một dự án khác và các tệp lớp đó là những tệp đã đưa ra ngoại lệ.
Hairbo

1
Tôi đã xóa một tập tin từ dự án của tôi sau đó thêm cùng một tập tin trở lại và điều này đã giải quyết vấn đề.
MindSpiker

70

Điều này thực sự không liên quan gì đến Trình tạo giao diện, điều đang xảy ra ở đây là các biểu tượng không được tải từ thư viện tĩnh của bạn bằng Xcode. Để giải quyết vấn đề này, bạn cần thêm các -all_load -ObjCcờ vào Other Linker Flagskhóa Cài đặt bản dựng Dự án (và có thể là Mục tiêu).

Vì Objective-C chỉ tạo một ký hiệu cho mỗi lớp, chúng ta phải buộc trình liên kết tải các thành viên của lớp bằng cách sử dụng cờ -ObjC và chúng ta cũng phải buộc bao gồm tất cả các đối tượng của mình từ thư viện tĩnh bằng cách thêm -all_loadcờ liên kết. Nếu bạn bỏ qua các cờ này sớm hay muộn, bạn sẽ gặp phải lỗi unrecognized selectorhoặc gặp các ngoại lệ khác, chẳng hạn như các cờ bạn đã quan sát ở đây.


5
Tôi thấy rằng chỉ -ObjCmột mình cờ đã sửa nó trong trường hợp của tôi.
Kekoa

5
@Kekoa đó là vì phiên bản Xcode (LLVM) của bạn gần đây hơn so với người viết câu trả lời này đã sử dụng. Ngày nay, sử dụng -ObjClà đủ tốt để khắc phục vấn đề.
Đến

Điều này chỉ giúp tôi. Trong quá trình biên dịch, nó cho thấy các vấn đề liên quan đến khung cần thiết cũng đã được giải quyết khi tôi nhập tất cả các khung.
Vaibhav Saran

Cờ -ObjC một mình đã khắc phục vấn đề của tôi. Tôi thực sự đã gặp lỗi khi có thuộc tính all_load trong iOS7.
Sushma Satish

Sử dụng -all_load -ObjC có thể gây tăng kích thước sản phẩm không cần thiết. vấn đề này xảy ra với các tệp danh mục quá trong khung.
Ali Amin

26

Tôi đã gặp vấn đề này ngày hôm nay khi sử dụng Swift.

Tôi đổi một lớp Model.h + Model.mthành a Model.swift. Đối tượng này đã được sử dụng trong Trình tạo giao diện với class = Model.

Ngay khi tôi thay thế đối tượng, lớp không thể tải được nữa.

Điều tôi phải làm là thay đổi tham chiếu lớp trong IB từ:

Class = Model
Module = 

đến

Class = Model
Module = <TARGETNAME>

Bạn sẽ tìm thấy <TARGETNAME>trong cài đặt xây dựng. Đó cũng là tên xuất hiện trong Swift-Header được tạo của bạn:#import "TARGETNAME-Swift.h"


1
Đây dường như là câu trả lời chính xác. Trừ khi ai đó có thể nói khác, điều này nên được đánh dấu là chính xác.
Bjørn Ruthberg

1
Câu trả lời tuyệt vời cảm ơn. Đối với tôi, Modulecái tên đã ở ngay đó. Đó là tên của ứng dụng của tôi.
ChrisH

Nó làm việc cho tôi. Đối với vấn đề của tôi, <TARGETNAME> được đề cập trong câu trả lời của bạn, là tên của khung chứa lớp.
Tyler Long

Tôi tự đi đến kết luận đây cũng là lỗi tôi gặp phải và sẵn sàng đăng những phát hiện của tôi khi tôi thấy bài đăng của bạn. Tôi thực sự đã nhìn thấy nó nhưng đã vượt qua nó, bởi vì nhiều câu trả lời và tiếng ồn xung quanh nó. Tôi nghĩ rằng câu trả lời của bạn có thể được cải thiện bằng một số ảnh chụp màn hình để phân biệt câu trả lời của bạn với những người khác. Tôi chắc chắn sẽ bắt nó nếu nó là như vậy. Rất cám ơn, dù sao, đã gửi nó ở đây. Bạn có upvote của tôi.
jvarela

Đối với AppDelegate, tôi đã có thể sửa lỗi này trong Giao diện người dùng Trình tạo giao diện. Đối với lớp tùy chỉnh của thành phần UI trong cửa sổ, Giao diện người dùng Trình tạo giao diện sẽ không cho phép tôi đặt lớp và mô-đun tùy chỉnh. Tôi đã phải làm như sau: (1) Mở tệp .xib dưới dạng "Mã nguồn" (nhấp chuột phải vào nó). (2) Thêm thuộc tính "customModule = <TARGETNAME>" bên cạnh thuộc tính customClass.
Poulsbo

20

Chuyển đến "ProjectName", nhấp vào nó và sau đó chuyển đến tab "Xây dựng giai đoạn", sau đó nhấp vào "nguồn biên dịch", sau đó nhấp vào nút "+", một cửa sổ sẽ xuất hiện, chọn "MyClass. m "tập tin và sau đó nhấp vào" thêm ",

Xây dựng dự án và chạy nó, vấn đề chắc chắn sẽ được giải quyết


có, tôi đã không kiểm tra TẤT CẢ các hộp mục tiêu tôi muốn thêm vào các lớp mới nhập của mình vào. Cảm ơn!
Joel Balmer

Đúng! Tệp VC của tôi bị thiếu trong dự án Target.
Sebastian Dwornik

19

Đó là sự cố bộ đệm Xcode4, chỉ cần xóa tất cả các thư mục trong / Users / your_user / Library / Application Support / iPhone Simulator / 4.3 / Application /

Ngoài ra nếu bạn có cùng một vấn đề kiểm tra trên iPhone, hãy xóa ứng dụng cũ trước khi chạy nó ...

Chúc may mắn. Pascual


8
Trong Cài đặt xây dựng dự án, bạn cần thêm cờ "-all_load -ObjC" vào phím "Cờ liên kết khác". Đây không phải là sự cố cụ thể của Xcode 4 và trên thực tế thường không liên quan gì đến Trình tạo giao diện.
Alasdair Allan

Giải pháp này đã được đề xuất vào tháng 1 năm 2010 (xem ở trên).
jhoule

6
Có - cách dễ dàng hơn để làm điều này chỉ là mở Trình mô phỏng iOS và từ menu chọn 'Đặt lại nội dung và cài đặt'
RanLearns

Hoặc bạn có thể làm những gì tôi đã làm và chỉ cần xóa ứng dụng được đề cập khỏi màn hình chính Trình mô phỏng. Tôi đã có thông báo lỗi tương tự, nhưng nó đang đề cập đến một đại biểu ứng dụng cũ.
spstanley

16

Đôi khi IBuilder bỏ lỡ customModule="AppName" customModuleProvider="target"

Để khắc phục, hãy mở bảng phân cảnh dưới dạng mã nguồn và thay thế dòng này:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
sceneMemberID="viewController">

đến đây:

<viewController storyboardIdentifier="StoryboardId" id="SomeID" customClass="CustomClass"
 customModule="AppName" customModuleProvider="target" sceneMemberID="viewController">

Sử dụng Xcode 6.3 (6D570) ngay khi tôi chạy, cài đặt sẽ trở lại trạng thái ban đầu (xấu). Bọ cánh cứng? Tôi đang cố gắng đưa một tệp nhanh vào dự án Objective C.
addzo

Trên XCode 6.4, chỉ cần thêm customModuleProvider = "target" trong mã nguồn của bảng phân cảnh, dưới trình điều khiển khung nhìn mong muốn, đã khắc phục sự cố.
Amro Shafie 7/07/2015

Tôi đã có thể giải quyết vấn đề của tôi chỉ với customModule="MyFrameworkName". Lớn +10
Stan

Trên thực tế, vấn đề của tôi là ngược lại, tôi muốn xóa CustomTaget nhưng Xcode không thay đổi tệp nguồn xib, vì vậy tôi phải xóa customModule = "AppName" customModuleProvider = "target" để nó hoạt động.
Adriana

14

Trường hợp của tôi - Cố gắng sử dụng Class từ khung nhanh chóng trong dự án mục tiêu c của tôi, tôi đã gặp lỗi này. Giải pháp là thêm Mô-đun (khung nhanh) của lớp trong Trình tạo giao diện / Bảng phân cảnh như dưới đây. Không có gì khác

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


2
Tôi đang sử dụng khung Swift trong dự án Swift được cài đặt bởi CocoaPods. Phương pháp này hoạt động. Và tên mô-đun là tên của khung.
JsW

1
Đây là công việc hoàn hảo. Cần tại sao mô-đun đó được gỡ bỏ ??
iSrinivasan27

Hoạt động hoàn hảo với các vấn đề về khung cocoapod ... cho bạn câu trả lời hoàn hảo ...
jayant rawat

13

Chuyển đến Xây dựng giai đoạn-> Biên dịch nguồn và thêm tệp .m mới của bạn.


Đúng, sau khi thêm các tệp mới từ dự án trước vào dự án XCode 4.5, việc thêm các tệp .m vào danh sách Nguồn biên dịch đã được thực hiện chắc chắn. Thêm "-all_load -ObjC" không hoạt động trong trường hợp của tôi, mặc dù không bị tổn thương.
whyoz

13

Trong trường hợp của tôi, nó đã hiển thị một lỗi cho một lớp thậm chí không tồn tại! Tôi nghi ngờ đó là một cái gì đó đã bị hỏng trong tập tin bảng phân cảnh. Nếu bạn không nhận ra tệp lớp trong lỗi, hãy thử điều này:

1) mở dự án của bạn trong cao siêu hoặc một biên tập viên tốt khác. Tìm kiếm các lớp được tham khảo. 2) loại bỏ toàn bộ bit nói

customClass="UnrecognizedClassName"

3) lưu nó. 4) quay trở lại xcode và dọn dẹp dự án, và thử chạy nó ngay bây giờ.

đã làm cho tôi.

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


Tôi sử dụng ứng dụng OSX TextEdit. Nó hoạt động tốt cho hoạt động này. Hãy chắc chắn để đóng dự án của bạn đầu tiên và đóng Xcode.
TJ

Điều đó cũng giúp. Tôi đã có nhiều hơn một đối tượng có cùng customClass, có lẽ tôi đã nhấp vào chế độ xem thay vì bộ điều khiển và được gán cùng tên.
Mc-

1
Đây cũng là giải pháp cho vấn đề tôi gặp phải; Trước đây tôi đã nhập một tên lớp một phần và bằng cách nào đó bảng phân cảnh đã được lưu theo cách đó (ví dụ customClass="MyCla"). Thay vì xóa bài tập lớp tùy chỉnh, tôi nên thận trọng khi chỉ đưa vào lớp tôi định sử dụng ở vị trí đầu tiên :)
dave

9

Tôi chỉ muốn thêm câu trả lời này vì hầu hết các câu trả lời ở đây đều cho rằng lớp thực sự tồn tại .. chỉ là trình liên kết / trình biên dịch quá ngu ngốc để xem nó .. vì vậy các câu trả lời xoay quanh việc cảnh báo cho trình liên kết về sự tồn tại của lớp hoặc tạo một hack để 'buộc' tồn tại nó ..

vấn đề của tôi xảy ra khi thông báo này thực sự đang nói về một lớp không tồn tại .. vì vậy một ví dụ sẽ là tôi quay trở lại một bản sửa đổi git cũ không có kiến ​​thức về một lớp nào đó .. tuy nhiên trình biên dịch phàn nàn rằng lớp đã nói không ' t tồn tại ..

giải pháp?

  • Nuke toàn bộ điều! đầu tiên xóa tất cả các tệp xây dựng, v.v. bằng cách xóa tất cả nội dung trong thư mục này ~ / Library / Developer / Xcode / DeruredData
  • xóa ứng dụng khỏi chính điện thoại (và xóa nội dung giả lập nếu bạn đang sử dụng trình giả lập)

bạn nên đi sau đó


2
Không thể +1 cái này đủ, đã khắc phục vấn đề của tôi. Vấn đề của tôi là chính xác giống như nơi tập tin đã bị xóa nhưng cảnh báo vẫn xuất hiện khi được biên dịch.
Brett

Trong Storyboard, bạn phải điền vào Mã định danh. Đôi khi tôi viết nó trong trường "Lớp" (trong Trình kiểm tra danh tính) do nhầm lẫn. Vì vậy, trình biên dịch đang phàn nàn với một lý do rằng Class không tồn tại!
Vincent

9

Cách tốt nhất để xóa lỗi là: 1) Chọn Tệp lớp (.m) 2) Trong " Thành viên mục tiêu ", "kiểm tra" mục nhập tên dự án


Những công việc này. Tôi đã phát triển một nhóm và vì một số lý do, lệnh cài đặt pod đã áp dụng sai mục tiêu cho một tệp lớp cụ thể. Nó đã được áp dụng cho một gói tài nguyên mà tôi có. Cấu hình chính xác là Pods- <project-title> - <pod-title>
krosullivan

Điều này không làm việc cho tôi. Các thành viên mục tiêu là chính xác, nhưng lỗi vẫn xảy ra.
Kokodoko

8

Tôi đã sửa lỗi này bằng cách sao chép văn bản từ class.h và .m của tôi, xóa các tệp lớp đó khỏi dự án và tạo các tệp class.h và .m mới có cùng tên bằng cách sử dụng "Thêm tệp". Sau đó, tôi dán mã trở lại vào các tệp mới và mọi thứ đều hoạt động tốt. Bằng cách nào đó các tệp không được liên kết chính xác khi chúng được tạo. Tôi không cần sử dụng bất kỳ cờ liên kết nào sau đó.


1
Khi tôi lần đầu tiên tạo các tệp, tôi không có .m ở cuối. Tôi đã thử đổi tên tệp và thêm lại, tuy nhiên tôi vẫn phải xóa và tạo lại tệp trước khi xcode hài lòng.
odyth

Tập tin của bạn có thể không phải là một phần của mục tiêu của bạn. Thêm lại nó có thể đã kết thúc với một hộp kiểm mặc định trong mục tiêu thích hợp.
jhoule

1
Giải pháp này cũng hiệu quả với tôi, nhưng tôi đã chắc chắn 100% rằng trước khi tôi xóa lớp đầu tiên (.h + .m), tôi đã kiểm tra xem đó có phải là một phần của mục tiêu của mình không. Đó không phải là vấn đề đối với tôi. Giống như Laura, tôi chỉ xóa lớp và tạo lại nó (với một tên khác), và nó hoạt động tốt, không có bất kỳ giải pháp nào khác trên trang này.
Nate

7

Tôi đã sửa lỗi này, tôi đã quên thêm đoạn mã sau vào tệp .m của mình:

@implementation MyTableViewCell

@end

Vì vậy, nó đã được gây ra bởi vì tôi đã tạo một trình giữ chỗ @interface cho ô bảng của mình, có kết nối với một phần tử trong tệp .xib, nhưng có một lỗi trong Trình tạo giao diện trong đó nếu không có @im THỰCation được chỉ định cho một lớp, nó không thể tìm thấy nó.

Tôi đã trải qua tất cả các bước từ các diễn đàn khác để xem .xib là nguồn và xem MyTableViewCell mặc dù tôi đã nhận xét nó ra khỏi mã của mình. Tôi đã thử đặt lại trình giả lập. Tôi thậm chí đã thử chia tất cả các lớp của mình thành các tệp riêng biệt có tên giống như các giao diện, nhưng không có gì hoạt động cho đến khi này.

Theo kinh nghiệm của tôi, không có vấn đề gì nếu tên của các tệp .h / .m khác với tên của @interface. Tôi có một số tệp chứa nhiều hơn một @interface và chúng hoạt động tốt.

PPS Tôi có một lời giải thích chi tiết hơn về lý do tại sao UITableViewCell và UICollectionViewCell gây ra lỗi này tại https://stackoverflow.com/a/22797318/539149 cùng với cách tiết lộ nó tại thời điểm biên dịch bằng cách sử dụng registerClass: forCellWithReuseIdent :.


6

Điều này xảy ra vì .xib đã có một liên kết cũ đến Đại biểu ứng dụng cũ không còn tồn tại nữa. Tôi đã sửa nó như vậy:

  • Nhấp chuột phải vào .xib và chọn Mở dưới dạng> Mã nguồn
  • Trong tệp này, tìm kiếm đại biểu Ứng dụng cũ và thay thế bằng ứng dụng mới

Mở dưới dạng Mã nguồn không còn tồn tại, nhưng bạn có thể dễ dàng nhấp chuột phải, Hiển thị trong Finder, sau đó nhấp chuột phải vào tệp và mở trong TextEdit. Tất nhiên, sao lưu tệp trước khi bạn thực hiện bất kỳ thay đổi nào;)
Scott Allen

6

chỉ cần thêm mã dưới đây khi bắt đầu phương thức appdelegate applicationatoindidfinishlanching, sau đó nó sẽ hoạt động tốt

[lớp học của tôi];


5

Tôi đã thử điều này và các câu trả lời khác được liệt kê trên trang web này, không có câu trả lời nào cho tôi. Nhận xét này (từ http://www.iphencedevsdk.com/forum/iphone-sdk-development/43330-unknown- class-interface-build-file.html ) đã giúp:

Sau khi tìm kiếm và tìm kiếm và tìm kiếm, cuối cùng tôi đã phát hiện ra tên của lớp bị xóa này ẩn trong một tệp. Tôi đã phải mở các tệp xây dựng giao diện bằng mã X, bằng cách nhấp chuột phải vào chúng và chọn 'xem là mã nguồn'. Sau đó tìm kiếm nó đã đưa ra

<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.IBCocoaTouchP lu gin</string>
<string>*this was the class name*</string>

Chỉ đơn giản là xóa dòng cuối cùng không sửa nó một cách đáng tiếc, phàn nàn rằng có số lượng mục sai trong tệp. Bạn cần loại bỏ dòng tương ứng trong phần của dòng trên nó, trong đó đề cập đến CustomClass.


5

Trong trường hợp của tôi, tôi có XCode6, tệp .m lớp được chỉ định kết thúc ở vị trí sai trong giai đoạn xây dựng - Đáng lẽ nó phải nằm dưới Nguồn biên dịch , nhưng cuối cùng lại nằm trongSao chép tài nguyên gói


Nhờ bạn, tôi bắt đầu xem danh sách và phát hiện ra rằng tập tin của tôi bị thiếu, có lẽ khi tôi tạo nó, tôi đã không đặt đúng mục tiêu
schmru


4

Vấn đề này dường như không bị lỗi thời.

Tôi gặp vấn đề tương tự với Xcode 8 và đã giải quyết nó tương tự như smilebot :

  1. Mở tệp bảng phân cảnh của bạn dưới dạng "Mã nguồn" trong Xcode:

  2. Tìm kiếm lớp đang được tham chiếu & xóa toàn bộ bit có nội dung

customClass = "UnrecognizedClassName"

  1. Mở tệp bảng phân cảnh của bạn dưới dạng "interacebuilder - Storyboard" một lần nữa và xây dựng lại ứng dụng của bạn.

3

Chỉ cần loại bỏ MyClass.m và .h và thêm chúng vào dự án một lần nữa là công việc của tôi.


3

Tôi đã có 'favourites lớp không xác địnhButton trong tệp Trình tạo giao diện' và theo dõi nó đến một cảnh trong truyện trong đó nút được đề cập có một lớp tùy chỉnh "favouritesButton" trong trường Lớp ở đầu Trình kiểm tra danh tính. Tôi có nghĩa là đặt giá trị đó trong trường tiếp theo: Nhãn danh tính.

Thay đổi điều này thành "UIButton" đã giải quyết vấn đề.


2

Tôi gặp phải điều này trong Swift.

Di chuyển tệp .xib vào thư mục Base.lproj của dự án đã thoát khỏi lỗi này.


Cảm ơn đã chia sẻ điều này, nhưng nó không giải quyết được vấn đề của tôi. Đây là giải pháp cuối cùng tôi đã tìm thấy: stackoverflow.com/a/28760089/456434
Mazyod 27/2/2015

2
Tôi cũng đã chạy vào vấn đề đó. Nhưng trong trường hợp của tôi, tên mô-đun bị thiếu là vấn đề: Xem < stackoverflow.com/a/29013058/784318 >
Besi

1

Tôi đã gặp lỗi này ngay hôm nay khi chuyển đổi ứng dụng aaLuminate của mình sang Universal theo Xcode 4. Ứng dụng này dựa trên mẫu tiện ích và ban đầu được xây dựng theo Xcode 3.

Để tiết kiệm thời gian, tôi đã sao chép Chế độ xem chính của iPhone và Flipside sang tên thích hợp trên ứng dụng Universal. Tôi gặp phải lỗi "Không xác định lớp x trong tệp Trình tạo giao diện". Trong trường hợp của tôi, nó không là gì trong các tệp hoặc mục tiêu XIB.

Tôi cũng đã sao chép tệp aaLuminate-Info.plist vì những lý do khác - cái này có một khóa cũ "Tên cơ sở tệp nib chính" được đặt thành MainWindow.

Ngay sau khi tôi xóa khóa này, nó đã khắc phục vấn đề!


1

Trong trường hợp của tôi, tôi đã gặp lỗi này vì tôi đã cố lưu một số công việc bằng cách tạo một dự án mới và sau đó xóa một số tệp nguồn và sao chép qua các tệp nguồn cùng tên khỏi dự án làm việc. Tôi cũng đã sao chép tệp MainStoryBoard đang tìm kiếm RootViewControll của mình. Tuy nhiên, khi tôi đã xóa RootViewControll gốc và sau đó được thêm vào RootViewControll từ sản phẩm trước đó, rõ ràng thao tác Thêm tệp không thể "kiểm tra" hộp đích như được đề xuất ở trên. Bằng cách chỉ đơn thuần là xóa tất cả các tệp ".m" của newley và đảm bảo rằng hộp thành viên đích đã được chọn, tất cả đều ổn. Tôi nghĩ những gì đã xảy ra là tệp bảng phân cảnh đang tìm kiếm một lớp đã bị "loại trừ" khỏi liên kết vì tư cách thành viên mục tiêu không được kiểm tra. Đảm bảo rằng các tệp cần thiết cho mục tiêu được chỉ định trong tư cách thành viên mục tiêu trong trình kiểm tra tệp đã thực hiện thủ thuật. Cảm ơn Pat! (xem ở trên)


1

Trong trường hợp của tôi, đó là vì tôi đã khai báo một lớp con của một lớp con của một ô UITableView trong tệp .h (khai báo của cả hai lớp con đều trong cùng một tệp .h), nhưng đã quên thực hiện một triển khai trống của lớp con thứ hai đó trong tập tin .m.

đừng quên thực hiện bất kỳ lớp con nào của lớp con bạn khai báo trong tệp .h! Nghe có vẻ đơn giản, nhưng dễ quên vì Xcode sẽ làm điều này cho bạn nếu bạn đang làm việc với một lớp trên mỗi tệp .h / .m.


1

Tôi đã có "RateView lớp không xác định trong Trình tạo giao diện" trong đó RateView là một lớp con của UIView. Tôi đã thả một UIView vào cảnh Storyboard của mình và thay đổi trường lớp Tùy chỉnh thành RateView. Tuy nhiên, lỗi này đã xuất hiện.

Để gỡ lỗi, tôi đã thay đổi tên lớp của mình thành RateView2 và thay đổi tất cả các tham chiếu cho phù hợp ngoại trừ trường lớp Tùy chỉnh của UIView. Thông báo lỗi vẫn xuất hiện như trước với RateView là lớp bị thiếu. Điều này xác nhận rằng thông báo lỗi có liên quan đến giá trị của trường lớp Tùy chỉnh. Tôi đã thay đổi giá trị này thành RateView2 và thông báo lỗi đã thay đổi thành "ClassView2 không xác định trong Trình tạo giao diện". Tiến độ của các loại.

Cuối cùng, tôi đã tự kiểm tra các tệp mã nguồn trong Trình kiểm tra tệp. Ở đó tôi phát hiện ra rằng tệp mã nguồn (mà tôi đã sao chép từ một hướng dẫn) không được liên kết với Target của tôi. Nói cách khác, nó không có Tư cách thành viên mục tiêu. Tôi đã chọn hộp làm cho tệp mã nguồn của lớp trở thành thành viên của ứng dụng đích và thông báo lỗi biến mất.


1

Trong trường hợp của tôi, tôi đã xóa một lớp có tên là "viewContoder" không nhận ra nó đã được chọn với trình kiểm tra danh tính của bảng phân cảnh (bên dưới 'Lớp tùy chỉnh' ở trên cùng).

Bạn chỉ cần chọn đúng lớp cho trình điều khiển xem trong trường Lớp tùy chỉnh của trình kiểm tra danh tính của bạn hoặc thêm một lớp mới vào dự án của bạn và chọn lớp đó làm Lớp tùy chỉnh của bạn.

Đã làm cho tôi!



1

Điều này khiến tôi phát điên một chút và không có gợi ý nào ở trên giúp tôi thoát khỏi lỗi này. May mắn thay, tôi chỉ có một đối tượng IB sử dụng lớp nên tôi chỉ xóa nó và thêm nó trở lại với cùng một lớp được chỉ định. Lỗi đã biến mất ...

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.