子类化和添加init方法始终返回nil

时间:2012-11-28 03:44:07

标签: objective-c inheritance init subclassing

我正在尝试将UIImage类子类化,并添加一个带有一些添加变量的自定义init方法。但是,当我尝试使用新的初始化程序创建一个新对象时,该对象始终为nil。新的init方法如下:

- (id)initWithLat:(int)latitude andLong:(int)longitude andSize:(int)size {
    self = [super initWithContentsOfFile:@"dot.png"];
    if (self) {
        self.lat = latitude;
        self.longi = longitude;
        self.dotScale = size;
    }
    return self;
}

我相信我是正确的子类,这是我的头文件:

#import <UIKit/UIKit.h>

@interface Dot : UIImage {
    int lat;
    int longi;
    int dotScale;
}

@property  int lat;
@property  int longi;
@property  int dotScale;

- (id)initWithLat:(int)latitude andLong:(int)longitude andSize:(int)size;

@end

我在尝试将Dot对象添加到NSMutableArray时收到错误。

dots = [[NSMutableArray alloc] init];
[dots addObject:[[Dot alloc] initWithLat:0 andLong:0 andSize:1]];

我的猜测是新的初始化程序有问题。我使用this作为指南。

2 个答案:

答案 0 :(得分:1)

如果找不到该文件,

initWithContentsOfFile:将返回nil。可以找到吗?使用记录/断点来查明在初始化过程中发生的事情。

答案 1 :(得分:1)

这是initWithContentsOfFile的文档:

initWithContentsOfFile:
Initializes and returns the image object with the contents of the specified file.

- (id)initWithContentsOfFile:(NSString *)path

Parameters
path
The path to the file. This path should include the filename extension that identifies the type of the image data.

Return Value
An initialized UIImage object, or nil if the method could not find the file or initialize the image from its contents.

请注意,如果找不到指定的文件,则调用将返回nil。它可能是一个安全的赌注,你的'dot.png'文件没有找到,特别是因为你没有指定它的完整路径。我无法想象你为什么要硬编码这个值,你可能应该为文件名添加一个参数给初始化器。