2010-12-11 66 views
1

我刚刚开始在Objective-C编程,我有经验与C.我有一些代码(约124行),我想移植到iOS(从OS X)。代码的目的是生成一个URL,然后在Mobile Safari中打开它。鉴于该应用程序没有用户界面,并且它只是生成和打开URL的唯一目的,我希望在启动应用程序时执行此代码。执行C代码在iPhone Objective-C项目启动

我做了一些研究,发现如果我想要一些代码在启动执行我不得不把它放在“App_NameDelagate.m”文件,在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... } 

部分,卷曲之间brases。问题是,当我在我的代码粘贴,并编译它(在Xcode),我得到约7个左右的错误和警告,他说,在每一个函数声明:

嵌套功能被禁用,则使用-fnested-功能重新启用

在一个点(当我开始写我的各种功能的代码,和主“如果”函数结束)

控制到达非void函数的端

它自己的代码由1个“if”函数和大约5个在“if”函数中调用的其他函数组成。

我知道自己的代码很好,因为我用它来构建具有相同目的的应用程序的Mac版本(以生成并打开URL)并且工作正常。

从OS X到iOS,我意识到一些Cocoa的变化,就像在OSX上使用[UIApplication sharedApplication]而不是[NSWorkspace sharedWorkspace]一样在iOS上打开URL。所以我不认为这是问题。我也在我的粘贴代码的开始处删除了“main”函数的标准声明,因为我知道它也在“main.m”文件中声明。

在我的应用程序的Mac版本中,我能够将代码直接放入“main.m”文件中,代码会编译并且应用程序运行得很好。在iOS上我收集,情况并非如此。

任何与此有关的帮助将不胜感激,因为它让我疯狂!

谢谢。

UPDATE:使问题 '嵌套函数' 行是:

INT generateCrosswordNumber(){

INT getDayNumber(){

布尔checkIfSunday(){

空隙handleSunday(){

void normalDay(){

以下每行代码都是调用函数的代码。对于每个功能,都有另一个花括号,用于关闭上面几行打开的花括号。

return YES修复了function reaches end of non-void function错误,工作很好,谢谢!

+0

你能引用引起警告/错误的行吗?对于“控制到达非空函数结束”,插入'return YES;'作为方法实现的最后一行:“ - (BOOL)...”方法签名期望方法返回一个BOOL值。 – Costique 2010-12-11 14:01:53

+0

感谢Costique,“返回YES”效果很好,已更新了帖子引起问题的线条。 – baxterma 2010-12-11 14:17:57

回答

5

所以首先,如果这个应用程序是为App Store的,我认为你必须有某种用户界面。我不认为你可以加载,然后立即保释给Safari。但是你必须用Apple来检查。

但是你遇到的问题是,你通常不能在Objective C方法中定义C函数。 [我想你可以在编译器中启用嵌套函数,但是我从来没有尝试过在客观C方法中嵌套C函数。从理论上说应该工作,但它不是我们通常做的事情。]

,但你可以在你的方法调用 C函数。事实上,我们一直这样做。这听起来像你正在做这样的事情:

- (int)someMethod:(int)x { 

    int someFunction(int x) { 

     return x + 2; 
    } 

    x = someFunction(x); 

    return x + 3; 
} 

注意你正在定义的方法定义一个C函数。而是你可以这样做:

int someFunction(int x) { 

    return x + 2; 
} 

- (int)someMethod:(int)x { 

    x = someFunction(x); 

    return x + 3; 
} 

现在你定义一个C函数,然后定义也使用该功能的客观C法。

编辑

出于好奇,我也试筑巢ObjC方法定义中的C函数定义的一些简单的情况下,这似乎与-fnested函数GCC很好地工作。也许对于一些简单的情况,可能比在顶层定义函数更有表现力,但我认为如果你在做一个方法中的多个或多个函数,那么这可能不是一个好的设计。此外,Clang不支持这种做法,至少在这个平台上编写这样的代码可能不符合您的长期利益。

0

您的Objective-C代码在结构上不正确。找到结构损坏的最佳方法可能是选择全部然后编辑 - >格式 - >重新缩进

所有的函数定义应该从最左边的列开始,并且破坏文件的解析应该是显而易见的。它很可能是一个失踪]或}。