1

先生は、.h および .m メソッドをコーディングする必要があるこの main.m を私に与えてくれました。私が作成した .m (メインではない) ファイルで、Xcode から「不完全な実装」という警告が表示されます。呼び出されたすべてのメソッドを作成したので、なぜそう言っているのかわかりません。これは、私が変更できないコードです。

#import <Foundation/Foundation.h>
#import "ChutesAndLadders.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        ChutesAndLadders *cl = [[ChutesAndLadders alloc]init];
        [cl initBoard];
        [cl makeChutes:10];
        [cl makeLadders:10]
        int chutes=0;
        int ladders=0;
        for(int i=0;i<cl.board.count;i++){
            NSString * cell = (NSString *)[cl.board objectAtIndex:i];
            int additionalSpaces = (int)[cl addToMove:cell];
            if(additionalSpaces>0)
                ladders++;
            else if (additionalSpaces<0)
                chutes++;
        }
        [cl printBoard];
    }
    return 0;
}

これが私がコーディングした .h です。問題ないと思います。

#import <Foundation/Foundation.h>
@interface ChutesAndLadders : NSObject{
    @private
    NSMutableArray * board;
}
@property (readwrite, retain) NSMutableArray *board;
-(id) initBoard;
-(NSString *)addToMove: (NSString *) cell;
-(void)makeChutes: (int) length;
-(void)makeLadders: (int) length;
-(void)printBoard;
@end

「@implementation ChutesAndLadders」行で問題が発生している.mは次のとおりです。

#import "ChutesAndLadders.h"
@implementation ChutesAndLadders//incomplete impementation????????????
@synthesize board=_board;
-(void) initBoard{
    //self = [super init];
    //if (self){
        _board = [board initWithCapacity: 100];
        //self._board=[[NSMutableArray alloc]initWithCapacity:100];
        for(int i =0; i < 100; i++){
            [_board addObject:@""];
        //}
    }
}
-(void)makeChutes: (int) length {
    //Make argument number of Chutes randomly across the board.
    for(int i = 0; i < length;){
        int random = arc4random_uniform(101);
        if ([[_board objectAtIndex:random] isEqual:@""]) {
            NSString *fString = [NSString stringWithFormat:@"C%d", length];
            [_board replaceObjectAtIndex:random withObject:fString];
            i++;
        }
    }
}
-(void)makeLadders: (int) length {
    //Make argument number of Ladders randomly across the board.
     for(int i = 0; i < length;){
        int random = arc4random_uniform(101);
        if ([[_board objectAtIndex:random] isEqual:@""]) {
                NSString *fString = [NSString stringWithFormat:@"L%d", length];
            [_board replaceObjectAtIndex:random withObject:fString];
            i++;
        }
    }
}
-(NSString *)addToMove: (NSString*) cell {
    if([[_board objectAtIndex:[cell integerValue]] isEqualToString:@"C10"]){
        return (@"-10");
     }
    if([[_board objectAtIndex:[cell integerValue]] isEqualToString:@"L10"]){
        return (@"10");
    }
     else
        return (@"0"); 
}
-(void) printboard {
    //Print the board in rows of 10 so that it looks like a square in console.
    for(int i=0; i < (_board.count/10); i++){
        for(int j = 0; j < 10; j++){
            NSLog(@"|");
            NSLog(@"%@", [_board objectAtIndex:(i+j)]);
            NSLog(@"|");
        }
        NSLog(@"\n");
    }
}
@end

これは、Objective-C、つまり一般的な Mac での私の最初の割り当てであり、しばらくの間、主に研究/研究を行ってきましたが、何が間違っているのかわかりません。

私はこのプログラムを実行していないので、他の愚かなエラーが表示される可能性があります。実際にコンソールに出力できるようになったら、それらを把握して、想定どおりに動作しているかどうかを確認します。

4

4 に答える 4

5

左上の三角形/感嘆符ボタンを使用して、Issueナビゲーターを開きます。

ここに画像の説明を入力してください

左側に小さな三角形がある「不完全な実装」のセマンティック問題を展開すると、XCodeの苦情の詳細を確認できます。

于 2013-02-20T11:40:25.043 に答える
2

このinitBoardメソッドは、ファイル内で異なる戻りタイプを持っていmます。また、Objective-Cでは大文字と小文字が区別されます。obj-cコンパイラでは等しくありませんprintBoardprintboardところで。init...nameはコンストラクターにのみ使用する必要があります。AppleのNamingMethodsドキュメントを参照してください。

于 2013-02-20T11:40:49.160 に答える
1

.h ファイルには、という名前のメソッドがあります-(void)printBoard;が、.m ファイルには、その名前は-(void)printboard. Objective-C は大文字と小文字を区別します。

また、-(id)initBoard;-(void)initBoard.

于 2013-02-20T11:39:48.030 に答える
0

addToMoveヘッダー ファイルでandを定義しprintBoardましたが、.m ファイルにはありません。それが警告の理由です。

于 2013-02-20T11:35:27.013 に答える