如何解决XCode 4.0中的“执行不完全”警告
| 该应用程序是从Cococa and Objective C Up and Running手册中重写的代码。 在开始理解所有内容的过程中,我想知道在以下代码中哪里出错了。对我来说,一切看起来都很好。 因此,能否请您帮助我确定警告的来源:Incomplete Implementation
我在Photo.m
源代码文件的@implementation Photo
行中得到了此代码?
照片.h
#import <Foundation/Foundation.h>
@interface Photo : NSObject{
Nsstring* caption;
Nsstring* photographer;
}
+ (Photo*) photo;
- (Nsstring*) caption;
- (Nsstring*) photographer;
- (void) setCaption: (Nsstring*)input;
- (void) setPhotographer: (Nsstring*)input;
@end
照片
#import \"Photo.h\"
@implementation Photo // <- Incomplete Implementation?
- (id)init
{
self = [super init];
if (self) {
[self setCaption:@\"Default Caption\"];
[self setPhotographer:@\"Default Photographer\"];
}
return self;
}
+ (Photo*) caption {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
- (Nsstring*) caption {
return caption;
}
- (Nsstring*) photographer {
return photographer;
}
- (void) setCaption:(Nsstring *)input {
[caption autorelease];
caption = [input retain];
}
- (void) setPhotographer: (Nsstring *)input {
[photographer autorelease];
photographer = [input retain];
}
- (void)dealloc
{
[self setCaption:nil];
[self setPhotographer:nil];
[super dealloc];
}
@end
我使用SNow Leopard 10.6.7和Xcode 4.0.0。
解决方法
除非有错字,否则您的Class方法定义为
+ (Photo*) Photo
;未实现(有一个+(Photo*) Caption {}
方法看起来只是个意外。
编辑:具有此功能的一种更简单的方法是使用属性,这是为您的实例创建变量的getter和setter的快捷方式,(请参阅此链接以获取良好的初学者教程:iPhone 101)像这样的变量:
在您的.h文件中:
@interface Photo : NSObject{
NSString* caption;
NSString* photographer;
}
@property (nonatomic,retain) NSString *caption;
@property (nonatomic,retain) NSString *photographer;
@end
在您的.m文件中:
@implementation Photo
@synthesize caption,photographer;
//Other stuff (init and any custom methods for class etc.. NOT getters and setters for variables)
- (void)dealloc
{
[caption release];
[photographer release];
[super dealloc];
}
, 您收到此错误的原因是,在头文件中您声明了一个方法:
+ (Photo*) photo;
但是您没有在m文件中实现它。
编辑:
看起来像这样:
+ (Photo*) caption {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
应该:
+ (Photo*) photo {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
, 通常,当您将鼠标悬停在警告上时,它不会告诉您缺少哪种方法,但是至少还有另外两种方法可以获取此信息:
键入Cmd-4或选择“问题导航器”视图(三角形图标中的!),然后展开此问题的“语义问题”警告。然后,您将看到一条消息,提示未找到\“ \”的方法定义。
键入Cmd-7或选择“日志视图”(看起来像标题气泡的最右边的图标),然后从列表中选择适当的问题。您将看到相同的消息。
, 您缺少+photo
,因为您不小心输入了caption
:
+ (Photo*) caption {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
应该
+ (Photo*) photo {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
, 您的.m文件没有以下实现:
+ (Photo*) photo;
那是缺少的方法。
, 尝试改变
+ (Photo*) caption {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
至
+ (Photo*) photo {
Photo* newPhoto = [[Photo alloc] init];
return [newPhoto autorelease];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。