错误集_ nib文件加载,Unknown class <XXClass> in Interface Builder file.,Undefined symbolsfor architecture

来源:互联网 发布:康佳电视直播的软件 编辑:程序博客网 时间:2024/05/16 07:40

目录(?)[+]

1.   nib文件加载... 1

2.   Unknownclass  <XXClass>  in Interface Builder file.1

3.   Undefinedsymbols for architecture i386:1

4.   对象的isa属性为0x01

 

1.       nib文件加载

类似initWithNibName这样的方法, nib文件不能带有扩展名

2.       Unknown class <XXClass>  in InterfaceBuilder file.

现象:

link报错, Unknown class  <XXClass>  in Interface Builder file., 而XXClass确实存在而且没有任何问题

原因:

参见:

http://stackoverflow.com/questions/1725881/unknown-class-myclass-in-interface-builder-file-error-at-runtime

       因为XXClass只在nib文件中被引用, 其它地方没有被引用到, 因此被link优化掉, 运行时nib文件试图加载XXClass时, 产生运行时错误

解决方案:

A.      link flag中指定 -all_load –ObjC
B.       在某处引用XXClass一次, 例如 [XXClassclass]
C.       在project中删除XXClass的文件, 并重新add进去

3.       Undefined symbols for architecture i386:

现象:

link报错,

Undefined symbols for architecture i386:

 "_AudioServicesCreateSystemSoundID", refereced from:

原因:

       没有将对应的framework加入工程

解决方案:

       在工程选项的 Linked Frameworks and Libraries中, 加入AudioToolbox.framework

4.       对象的isa属性为0x0

       对象id不为nil,但对象的isa属性为0x0,说明对象已经释放,注意检查对象计数。

       比如,将self.obj=arg 写为 obj=arg,局部变量arg释放后,obj就不存在了(因为单纯的赋值没有对arg进行retain或者copy),指针无效。

       将property和变量实际名字分别命名可以避免这类错误,例如将obj的变量命名为_obj,而属性名为obj,那么如果写出obj=arg,可以很容易的发觉。

0 0
原创粉丝点击