<创建于 2013-12-21 20:45:49 注:快累死了,倒霉催的。。。>
通过classString构造class然后实例化一个对象的过程很简单。如下
NSString *myClassStr = @"myClass";
Class myClazz = NSClassFromString(myClassStr);
if (myClazz) {
id myClassInit = [[myClazz alloc] init];
}
前不久遇到一个问题,"主工程(MainProject)"调"静态库工程(LibProject)"的方法实例化对象,目标类存在于LibProject中,构造方法如下
+(id)getObjectWithClassName:(NSString *)aClassName {
id rtnObject = nil;
Class myClazz = NSClassFromString(aClassName);
if (myClazz) {
rtnObject = [[myClazz alloc] init];
}
return rtnObject;
}
每次都返回nil,同时很确定的一点是这个类肯定存在,于是在主工程直接反射创建对象,同样是nil。
进一步做了一个实验
1. 在主工程的MainViewController中 #import "MyClassForTest.h"
2. -(void)test {
NSLog(@"wzf===>%@",[MyClassForTest class]);
Class myClazz = NSClassFromString(@"MyClassForTest");
NSLog(@"wzf===>%@",[myClazz class]);
}
这样就能够得到, = =!
搜索了一个google,在stackoverflow中有人提出了同样的问题(http://stackoverflow.com/questions/2227085/nsclassfromstring-returns-nil)
有人提到了文档中的解释 “Return Value :The class object named by aClassName, or nil if no class by that name is currently loaded. If aClassName is nil, returns nil.” 依照其解释,如果返回的是nil的话,要吗不存在这个“aClassName”,要吗是"没有loaded"。排除前一项,只能存在于后一项,那就是“此时未加载”。
因此联想到了,Other Lind Flag中的 “-all_load”设置,这个就是解决问题的关键。
"-all_load"设置方式,选择MainProject.xcodeproject的MainProject(target) 在Build Setting中找到Other Link ... 添加上就可以了
分享到:
相关推荐
在Lua的世界里,CJSON(Compact JSON)是一个非常重要的库,它允许我们处理JSON数据,进行编码和解码。...虽然这需要对库源代码进行调整,但通过这种方式,我们可以更好地适应特定的项目需求和数据一致性要求。
通过使用这样的工具类,开发者可以更安全地进行字典到模型的转换,避免因为`nil`或`null`导致的程序错误。在实际开发中,此类工具类往往能提高代码的健壮性和可维护性。对于处理网络数据,尤其是在与服务器交互频繁...
nil_value_error解决办法.md
例如,在使用 ADO 数据库组件时,调用程序调用该 DLL 时可能会出现“尚未调用 CoInitialize”错误,解决方法是在程序初始化时调用 CoInitialize(nil) 方法。 2. 在使用 TWebBrowser 显示 HTML 文档时或者把 ...
类型通过实现一个接口的所有方法来实现该接口。既然无需专门显式声明,也就没有“implements”关键字。 接口也是值。它们可以像其它值一样传递。 接口值可以用作函数的参数或返回值。 在内部,接口值可以看做包含值...
解决方法有: 1. 在访问字典值之前,先检查key是否存在,使用`containsKey:`(Objective-C)或`contains(key:)`(Swift)。 2. 使用可选绑定(Objective-C的`if let`或Swift的`if let`)来安全地解封字典值。 3. ...
例如,在使用 ADO 数据库组件时,可能会出现“尚未调用 CoInitialize”错误,解决方法是在程序初始化时调用 CoInitialize(nil) 方法。同样,在封装 WebBrowser 到 DLL 中时,可能会出现“尚未调用 CoInitialize”...
### Golang TCP粘包拆包问题的解决方法 #### 一、引言 在使用Go语言进行网络编程时,特别是TCP编程过程中,经常会遇到所谓的“粘包”与“拆包”问题。这些问题的发生通常会影响到数据的正确性以及系统的稳定性。...
在字典中,当我们尝试访问一个不存在的key时,会得到`nil`。如果未做处理,直接对这个nil进行操作,程序同样会崩溃。为了避免这种问题,可以使用`NSDictionary`的安全方法`object(forKey:)`,它在key不存在时返回`...
在iOS开发中,后台返回的数据排空,即`...通过以上方法,开发者可以在iOS应用中有效地处理后台返回的`NSNull`和`nil`数据,提高应用的健壮性和用户体验。在实际开发中,应结合项目需求和团队规范灵活运用这些策略。
特别是,我们找到了带电Solv和Nil几何层的解决方案。 我们还发现Nil黑洞具有超标度违规。 对于我们所有的解决方案,我们计算相应双场理论的热电直流输运系数。 我们发现没有超标度违规的Solv和Nil黑洞对金属是双重...
- **NullSafe Category**:这是一个强大的解决方案,通过Category在运行时将`NSNull`对象自动转换为`nil`,无需额外操作。可以在GitHub上找到这个开源库,将其集成到项目中即可。 3. **深入理解JSON结构** JSON...
Delphi 中解决 "未调用 CoInitialize" 错误的方法 在 Delphi 开发中,遇到 "尚未调用 CoInitialize" 错误是一种常见的问题。这个错误通常发生在使用 COM 组件或 OLE 对象时,例如使用 ADO 数据库组件或 WebBrowser ...
1.简介 按照Go语言的规范,任何类型在未初始化的时候都对应一个零值: 布尔型零值为:false ...若对一个值为nil的指针调用其方法或者访问对应类型的属性,则会导致panic. panic: runtime error: invalid mem
在Objective-C编程中,了解nil、Nil、NULL和NSNull之间的区别至关重要,因为它们在不同场景下有着不同的用途和含义。下面将逐一详细介绍这些概念。 1. **NULL** NULL是C语言中的一个宏,用来表示空指针。在C语言中...
另一种方法是让`EntityStorage`接口包含一个`Connect()`方法,该方法返回一个错误,这样就可以通过检查错误来判断连接是否成功。 总的来说,理解Go语言中的`interface`和`nil`行为至关重要,尤其是在处理接口值时。...
项目中碰到的,记录一下
ShellExecute(Application.Handle, 'open', 'Notepad.exe', nil, nil, SW_SHOW); 此外,ShellExecute 函数还可以用于打开 URL 地址,例如: ShellExecute(Application.Handle, 'open', 'http://www.neu.edu.cn', ...
= nil {”块 if err != nil {当前功能块, if err != nil {生成。 用法 安装和更新方式 $ go get -u github.com/koron/iferr 运行, if err != nil {对于1234字节的位置块,则获取。 $ iferr -pos 1234 < main....