声明和调用内部方法的问题

时间:2011-02-15 23:21:37

标签: objective-c cocoa

如何在常规方法中声明和使用小辅助函数?

在我的objective-c方法中,我需要一个函数来查找字符串

中的项目
-(void) Onlookjson:(id) sender{
    NSString * res = [[sender gstring] copy];
    persInfoBirth.text = getKeyValue(res, @"Birth");
}

我想出了一个正常的C类型声明,用于辅助函数getKeyvalue,就像这样

NSString * getKeyvalue(NSString * s, NSString * key){
   NSString *trm = [[s substringFromIndex:2] substringToIndex:[s length]-3];
   NSArray *list = [trm componentsSeparatedByString:@";"];
   //....
   NSString res;
      res = [list objectAtIndex:1];
   //...    
   return res;
} 

s:

中的输入字符串示例

s = @“{Birth =”1910“; Death =”1936“;}”;

无论如何,对于辅助函数中的两个第一行中的任何一行,我得到一个异常“无法识别的选择器发送到实例”

如何声明仅在内部使用的辅助函数以及如何安全地调用它们?

问候

马丁

1 个答案:

答案 0 :(得分:0)

这是真正的代码吗?你从编译器得到零错误和警告吗?您不能忽略编译器警告,除标准警告外,还应打开静态分析器。

上面的代码有很多问题,其中大部分内容都与声明和调用方法无关。以上代码无法编译,因此可能粘贴错误或其他东西..

无论如何..声明和使用方法。为什么使用c函数?除非你有充分的理由不使用Objective-c?如果你有充分的理由使用C函数,你的定义应该是: -

NSString *getKeyvalue( NSString *s, NSString *key ){
  ...
}

请注意参数。由于NSString实例驻留在堆中(不在堆栈中),因此您总是希望将指针传递给它们。

然后,您需要将声明放在头文件中: -

NSString *getKeyvalue( NSString *s, NSString *key )

修改

在Objective-c中,普通方法辅助方法之间没有区别,只有一种,你有一个写了一个

- (void)onLookJson:(id)sender { .. }

把它拆开..

  1. 所有方法均以+或 - 开头,表示类方法实例方法。由于您熟悉C ++,我猜你知道这意味着什么。

  2. (void)是返回类型。即此方法不返回值。如果它确实如此(浮动)或(NSString *)或(id)。

  3. onLookJson:是方法名称,方法接受1个参数。请注意,''实际上是名称的一部分。这种方法绝不是'onLookJson'的任何情况。参数必须始终遵循:,因此不带任何参数的方法必须没有参数。

  4. 实施例

    - (NSString *)fullName { .. }
    

    这是一个实例方法,例如Person Class,您可以将其称为: -

    NSString *theName = [aPerson fullName];
    

    所以

    • 一个不需要的方法名称 参数就像'发言'

    • 一种方法 带有1个参数的名称就像 'speakTo:'

    • 一个取2的方法名称 参数就像'speakTo:language:'

    • 一个需要3的方法名称 参数就像'speakTo:language:volume:'

    剩下的就是输入参数类型和名称。 你的功能定义:

    NSString *getKeyvalue( NSString *s, NSString *key ){
    

    会变成......

    - (NSString *)getValue:(NSString *)s key:(NSString *)key { .. }
    

    再次,您需要在标题中声明它,否则您将收到编译器警告。

    - (NSString *)getValue:(NSString *)s key:(NSString *)key;