Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 需要关于NSClassFromString的建议吗_Iphone_Objective C - Fatal编程技术网

Iphone 需要关于NSClassFromString的建议吗

Iphone 需要关于NSClassFromString的建议吗,iphone,objective-c,Iphone,Objective C,根据这一准则, 我不了解NSClassFromString 我怎么知道“viewControllerName” 我可以从其他来源使用它吗 你能告诉我更多关于如何使用NSClassFromString的信息吗 UIViewController *viewController = [[NSClassFromString(viewControllerName) alloc] init]; NSClassFromString返回一个Objective-C类,该类基于其名称作为字符串(函数名实际上是自解

根据这一准则, 我不了解NSClassFromString

我怎么知道“viewControllerName” 我可以从其他来源使用它吗

你能告诉我更多关于如何使用NSClassFromString的信息吗

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)获取自定义类吗?比