0

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]];

私の推測では、新しいイニシャライザに問題があると思われます。これをガイドとして使用していました。

4

2 に答える 2

1

initWithContentsOfFile:ファイルが見つからない場合は nil を返します。見つけられますか?ロギング/ブレークポイントを使用して、初期化中に何が起こっているかを調べます。

于 2012-11-28T03:50:20.850 に答える
1

これは のドキュメントですinitWithContentsOfFile:

initWithContentsOfFile:
指定されたファイルの内容で画像オブジェクトを初期化して返します。

- (id)initWithContentsOfFile:(NSString *)パス

パラメーター

ファイルへのパス。このパスには、画像データのタイプを識別するファイル名拡張子を含める必要があります。

戻り値
初期化された UIImage オブジェクト、またはメソッドがファイルを見つけることができなかった場合、またはその内容から画像を初期化できなかった場合は nil。

指定されたファイルが見つからない場合、呼び出しは nil を返すことに注意してください。特にフルパスを指定していないため、「dot.png」ファイルが見つからないことはおそらく安全な賭けです。とにかくこの値をハードコーディングしたい理由は想像できません。おそらく、ファイル名のパラメーターを初期化子に追加する必要があります。

于 2012-11-28T03:52:03.170 に答える