2013-04-27 56 views
0

我已经为一个类写了一个方法formatSearchString,并试图在它被实现之前在一行中调用它(应该不重要?)。我得到这个错误:Objective-C转发方法声明

Error: Semantic Issue 
Use of undeclared identifier 'formatSearchString' 

我使用的XCode 4.6.2

接口文件FHViewController.h:您正在使用

#import "FHViewController.h" 

@interface FHViewController() 
- (NSString *)formatSearchString:(NSString *)userEntry; 
@end 

@implementation FHViewController 
@synthesize searchTerm; 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *formatted = [formatSearchString userEntry:searchTerm]; 
} 

- (NSString *)formatSearchString:(NSString *)userEntry 
{ 
    NSLog(@"User Entry: %@", userEntry); 
    return @"Dummy string for now"; 
} 
@end 
+2

为什么将方法声明添加到.h文件和.m文件中的类扩展?也不需要。如果该方法被其他类使用,则只需要.h文件中的方法声明。现代Objective-C不再需要.m文件中的前向声明。 – rmaddy 2013-04-27 20:36:13

+0

您应该也可能将'#import '更改为'#import ',因为这是声明了基于UI *的类的地方。你的项目现在编译好了,因为你的' -Prefix.pch'预编译的头文件中有'#import ',但理想情况下,类不应该依赖在那。 – NSGod 2013-04-27 21:39:02

+0

您的所有建议都已实施并完美运作。谢谢。我是objective-c的新手。我遵循的模式来自(显然已经过时)Apple Objective-c API文档以及来自本网站的帖子询问同一个问题。我真正的问题是想像一个15年的Java程序员 - 没有意识到我需要明确地说“自我”在我自己的课堂上调用一种方法。 – gbshuler 2013-04-28 03:43:33

回答

0

#import <Foundation/Foundation.h> 

@interface FHViewController : UITableViewController 
<UITableViewDataSource, UITableViewDelegate, NSURLConnectionDataDelegate> 
@property(strong, nonatomic) NSString *searchTerm; 
- (NSString *)formatSearchString:(NSString *)userEntry; 
@end 

实现文件FHViewController.m formatSearchString作为变量名称,而不是方法名称,您需要调用formatS earchString对象上:

NSString *formattedString = [self formatSearchString:mySearchString]; 
4
NSString *formatted = [formatSearchString userEntry:searchTerm]; 

这条线是错误的。注意区别:

NSString *formatted = [self formatSearchString:searchTerm]; 
+0

如何直截了当。我需要更多地考虑在Objective-c中明确地调用“自我”。非常感谢! – gbshuler 2013-04-27 20:42:40

0

ObjectiveC中方法调用的语法是[receiver method: param1 ...]。因此,您需要将代码更改为:

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *formatted = [self formatSearchString: searchTerm]; 
}