1

私は iOS プログラミングが初めてで、developer.apple.com での鳥の観察に関する Your Second iOS App と呼ばれる 2 番目のチュートリアルに行き詰まっています。コードを実行すると、「詳細シーンに情報を表示する」セクションの最後で、BirdSightingDataController.m ファイルで「'birdsighting' の目に見える @interface がセレクター 'initwithname:location:date:' を宣言しません」というエラーが表示されます。 "sighting = [[BirdSighting alloc] initWithName:@"Pigeon" location:@"Everywhere" date:today];" ライン。私はドキュメントを何度もチェックし、もう一度 tut を実行しましたが、これを修正する方法が見つかりませんでした。

#import "BirdSightingDataController.h"
#import "BirdSighting.h"
@interface BirdSightingDataController ()
- (void)initializeDefaultDataList;
@end
@implementation BirdSightingDataController
- (void)initializeDefaultDataList {
    NSMutableArray *sightingList = [[NSMutableArray alloc] init];
    self.masterBirdSightingList = sightingList;
    BirdSighting *sighting;
    NSDate *today = [NSDate date];
    sighting = [[BirdSighting alloc] initWithName:@"Pigeon" location:@"Everywhere" date:today];
    [self addBirdSightingWithSighting:sighting];
}
- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
    if (_masterBirdSightingList != newList) {
        _masterBirdSightingList = [newList mutableCopy];
    }
}
- (id)init {
    if (self = [super init]) {
        [self initializeDefaultDataList];
        return self;
    }
    return nil;
}
- (NSUInteger)countOfList {
    return [self.masterBirdSightingList count];
}
- (BirdSighting *)objectInListAtIndex:(NSUInteger)theIndex {
    return [self.masterBirdSightingList objectAtIndex:theIndex];
}
- (void)addBirdSightingWithSighting:(BirdSighting *)sighting {
    [self.masterBirdSightingList addObject:sighting];
}
@end

Birdsighting.h ファイル

#import <Foundation/Foundation.h>

@interface BirdSighting : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *location;
@property (nonatomic, strong) NSDate *date;
-(id)initWithName:(NSString *) name locaiton:(NSString *)location date:(NSDate *) date;

@end
4

1 に答える 1

0

Birdsighting.hをチェックし、メソッドが

- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date;

そこで宣言されています。これは基本的に、Bidsightingクラスのインスタンスで使用できるメソッドを他のクラスに通知します。

インターフェイス宣言にタイプミスがある可能性があります(これはアップルのサンプルでも発生します)。

于 2012-11-24T13:36:52.373 に答える