Iphone 需要关于NSClassFromString的建议吗
根据这一准则, 我不了解NSClassFromString 我怎么知道“viewControllerName” 我可以从其他来源使用它吗 你能告诉我更多关于如何使用NSClassFromString的信息吗Iphone 需要关于NSClassFromString的建议吗,iphone,objective-c,Iphone,Objective C,根据这一准则, 我不了解NSClassFromString 我怎么知道“viewControllerName” 我可以从其他来源使用它吗 你能告诉我更多关于如何使用NSClassFromString的信息吗 UIViewController *viewController = [[NSClassFromString(viewControllerName) alloc] init]; NSClassFromString返回一个Objective-C类,该类基于其名称作为字符串(函数名实际上是自解
UIViewController *viewController = [[NSClassFromString(viewControllerName) alloc] init];
NSClassFromString返回一个Objective-C类,该类基于其名称作为字符串(函数名实际上是自解释的) 传入的字符串是要创建的类的名称,例如: 如果您有一个名为MyViewController的类,并且希望从该字符串中获取Objective-C类,则可以使用此函数,如
NSClassFromString(@“MyViewController”)代码>
通常,您只需要在测试可能不可用的类名时执行此操作,例如,在编写同时针对iPhone OS 2.0和3.0的代码时
如果将该类用作符号,则如果该类在以前版本的操作系统上不存在,则该类将崩溃。因此,您使用此函数使用该字符串返回一个类,如果该类成功返回,您知道它存在并且可以安全使用,否则如果它返回nil
,则该类不存在,您不应该使用它,您的程序应该采取措施在这种情况下正常运行。NSClassFromString根据其名称作为字符串返回Objective-C类(函数名实际上是自解释的)
传入的字符串是要创建的类的名称,例如:
如果您有一个名为MyViewController的类,并且希望从该字符串中获取Objective-C类,则可以使用此函数,如NSClassFromString(@“MyViewController”)代码>
通常,您只需要在测试可能不可用的类名时执行此操作,例如,在编写同时针对iPhone OS 2.0和3.0的代码时
如果将该类用作符号,则如果该类在以前版本的操作系统上不存在,则该类将崩溃。因此,您使用此函数使用该字符串返回一个类,如果该类成功返回,您知道它存在并且可以安全使用,否则如果它返回nil
,则该类不存在,您不应该使用它,您的程序应该采取措施在这种情况下正常运行。我希望在运行时确定类名,因此NSClassToString很有用。但是,当从静态库中使用这些类时,它返回nil。我以前遇到过这个问题,并使用-ObjC链接器标志解决了它
然而,由于某些原因,在我当前的项目中,这并不能解决它。我能看到的唯一区别是,在第一种情况下(在教程之后),我制作了一个OSX静态库,并更改了相关部分,使其生成了ARMv6版本。在第二个例子中,我根据模板为iPhone操作系统创建了一个静态库
这确实是一个困惑
编辑
我找到了解决方案,就是这样:我只是向使用静态库的目标以及库本身的目标添加了-ObjC链接器标志。我希望在运行时确定类名,因此NSClassToString很有用。但是,当从静态库中使用这些类时,它返回nil。我以前遇到过这个问题,并使用-ObjC链接器标志解决了它
然而,由于某些原因,在我当前的项目中,这并不能解决它。我能看到的唯一区别是,在第一种情况下(在教程之后),我制作了一个OSX静态库,并更改了相关部分,使其生成了ARMv6版本。在第二个例子中,我根据模板为iPhone操作系统创建了一个静态库
这确实是一个困惑
编辑
我找到了解决方案,就是这样:我只是在使用静态库的目标以及库本身的目标中添加了-ObjC链接器标志。谢谢Jasarien,你能告诉我吗。我应该在哪里定义自定义类?我可以从另一个源(如xml)获取自定义类吗?谢谢你的帮助如果是的,你能给我一些简单的算法吗?如果你正在使用自定义类,即你创建的类,并且是你项目的一部分,你没有理由使用NSClassFromString。。。为什么要使用此功能?只要你的类声明是正确的,并且在你需要使用它的地方导入了标题,你就可以直接使用类名,就像你对其他类,比如NSString所做的那样。我明白了,这意味着类不能是项目的一部分,对吗?一个小问题,那么@“MyViewController”是指#导入“MailComposer ViewController.h”@实现MailComposer ViewController@结束或者它意味着MailComposer视图控制器如果它意味着MailComposer视图控制器我不明白它如何构建一个类,因为我不知道该类的代码在哪里。我不确定你想问什么。你说你正在使用一个自定义类,但是你提到了mail composer类。。。这很令人困惑。MFMailComposerViewController
属于MessageUI框架,如果希望使用它,您需要将其包含在项目中并链接到它。如果要支持iPhone OS 3.0之前版本的用户,只需担心操作系统兼容性检查。如果您只打算支持3.x及以上版本,则无需担心。@RAGOpoR:听起来您正试图理解Apple的MailComposer示例应用程序。该项目旨在展示如何在瞄准2.x的同时使用OS3.x功能。它们是MessageUI框架中的薄弱环节,在MessageUI框架中定义了MFMailComposeViewController,并使用NSClassFromString检查运行应用程序的操作系统上是否存在MFMailComposeViewController。如果是这样,他们就继续使用它。谢谢Jasarien,你能告诉我吗。我应该在哪里定义自定义类?我可以从另一个源(如xml)获取自定义类吗?比