我的教授给了我一个主要内容,我必须使用 Xcode 在 Objective-C 中制作 .h 和 .m 文件。我几乎完成了,但有两个警告我不知道如何摆脱,“未使用的表达式结果”。错误与我创建大小为 100 的数组的 init 方法有关。这里是 main 创建一个对象然后调用我不正确编码的方法的地方,这部分是我的老师给出的,我无法更改它:
// main.m
// ChutesAndLadders
#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;
}
这是我的方法的相关部分:错误来自上面的“initBoard”方法和下面的“initWithCapacity”行。我知道这两个警告描述的是同一个错误。下面的代码是我的,所以我可以更改它,与上面不同。
@synthesize board = _board;
-(id) initBoard
if((self = [super init]){
[board intiWithCapacity: 100];
for(int i = 0; i < 100; i++){
[board addObject:@""];
}
}
return self;
}
这是我在 .h 文件中声明“板”的相关代码:
@interface ChutesAndLadders : NSObject{
@private
NSMutableArray * board;
}
@property (readwrite, retain) NSMutableArray *board;
-(id) initBoard;
我尝试了很多语法上的小改动,但无济于事。请不要直接告诉我解决方案,但我认为我只需要向正确的方向轻推或推动,一旦我知道解决方案,我将发布解决方案。
伪解决方案:
@synthesize board=board;
-(void) initBoard{
_board = [board initWithCapacity: 100];
for(int i =0; i < 100; i++){
[_board addObject:@""];
}
}
这消除了其中一个警告,但我的程序运行不正常,所以我还有其他方法要做。虽然这个具体问题已经得到解决,但我对它现在的工作方式有了更好的了解。
实际解决方案
@synthesize board=_board;
-(void) initBoard{
_board = [NSMutableArray arrayWithCapacity:100];
for(int i =0; i < 100; i++){
[_board addObject:@" "];
}
}
这是最终根据Hermann工作的方法。我发誓我尝试过一次但它没有用,所以我一直在玩并改变一些东西(把它搞得更糟),然后最终又回到了这个,它当然奏效了。Xcode 的谎言有时会激怒我。