微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XCode 4.0中的“执行不完全”警告

如何解决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 举报,一经查实,本站将立刻删除。