Unknown Class XX in Interface Builder File

IOS学徒 第二本 Checklist


继续跟着书做的时候,因为学习的是第二版,环境和我机器上的不太一样,书上新建项目后,mainViewController的名字默认为ChecklistsViewController,而我创建后名字为ViewController。为了保持一致,我将ViewController相关的.h和.m文件重命名为ChecklistsViewController,如下

然后修改了ChecklistsViewController.m中的对.h文件的引用名称,将stroyboard中的TableViewController的Custom Class设置为ChecklistsViewController。

感觉这下应该命名保持一致了,然而运行项目,提示Debug信息:“Unknown class ChecklistsViewController in Interface Builder file.


网查后发现,出现该Debug信息一般是因为有Class被IB引用,却没有出现在任何其他的源文件中。应用在上述问题场景,Custom Class设置为ChecklistsViewController,被IB引用,而编译器却没有在其他源文件中找到“ChecklistsViewController"这一Class。

因此,原因查明为虽然我修改了默认ViewController的文件名和.h文件引用,但是忘记修改接口名和实现名称:

对.h .m文件进行如下修改:

‘’‘Objective C

@interface ViewController //改为 @interface ChecklistsViewController


@implementation ViewController //改为 @implementation ChecklistsViewController

’‘’


网上解决方案原文链接:http://blog.sina.com.cn/s/blog_6056c8830100wdea.html

原文如下:

Interface Builder找Class的机制和一般的源文件相同,需要保证包含目标symbol的文件被链接进到最终的app。

出现这个错误,是因为这个class只在IB中用到,编译器在其他源文件中没有发现对这个class的引用,于是没有链接那个class。

解决方法:
1. 在任意一个源文件中使用一下这个class,比如NSLog(@”%@”, classA);
2. 在project的Info里面的Link Flag处,增加-all_load,这样会链接所以存在的symbol


StackOverflow上感觉比较有用的相关信息:http://stackoverflow.com/questions/4591911/unknown-class-firstviewcontroller-in-interface-builder-file


### 接口(Interface)在编程和软件设计中的定义 接口是一种抽象的概念,用于描述对象之间的交互方式。它通常被用来指定类或模块的行为契约[^1]。通过接口,开发者可以定义一组方法、属性或其他成员而不提供具体的实现细节。这种机制允许不同的组件之间保持松耦合的关系。 #### 编程语言中的接口 在许多面向对象的语言中,比如 Java 和 C#,接口是一个显式的语法结构,表示为 `interface` 关键字。这些接口仅包含方法签名和其他声明性的特性,而具体的功能实现在继承该接口的类中完成。例如,在 Java 中: ```java public interface GreetingService { String greet(String name); } ``` 上述代码片段展示了一个简单的接口 `GreetingService`,其中只定义了一种行为——即如何向某个人打招呼。 #### 软件设计层面的作用 从更广泛的视角来看,接口不仅限于特定语言的关键字支持;它可以指代任何两个系统间通信的标准协议或者约定。这有助于促进模块化开发并简化维护工作量。当提到“软件设计”时,“接口”的含义可能更加宽泛,涵盖了API文档、消息传递模式以及服务端点等多种形式。 ### 实现示例 (Python) 尽管 Python 并未强制要求像静态类型语言那样创建正式的 Interface 类型, 它仍然可以通过 ABCs(Abstract Base Classes) 来模拟这一功能: ```python from abc import ABC, abstractmethod class PaymentProcessor(ABC): @abstractmethod def process_payment(self, amount: float) -> None: pass @abstractmethod def refund_payment(self, transaction_id: str) -> bool: pass class CreditCardPayment(PaymentProcessor): def process_payment(self, amount: float) -> None: print(f"Processing credit card payment of {amount}.") def refund_payment(self, transaction_id: str) -> bool: print(f"Refunding credit card payment with ID {transaction_id}.") return True ``` 此例子展示了怎样利用 Python 的抽象基类来构建类似于其他 OOP 语言里的接口效果.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值