如何修复“坏接收器类型”错误

时间:2013-09-26 12:56:47

标签: objective-c

我正在制作一个应用程序,允许您设置名称和边数,然后应用程序将自动计算形状名称。我被要求将边数从NSNumber更改为int。我已经这样做但现在我得到一个错误说“接收器类型不好”。我该怎么做才能纠正这个问题,但要保留副财产的数量为int

这是我的类

的头文件
#import <Foundation/Foundation.h>

@interface shape : NSObject

@property int *numberOfSides;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *colour;

@property (nonatomic, strong) NSString *calculatedName;

void waitOnCR (void);
- (NSString *)calculatedName;

@end

这是类

的实现文件
- (NSString *)calculatedName {
    if ([self.numberOfSides isEqual: @3]) {
        return self.name = @"Triangle";
    }
    else if([self.numberOfSides isEqual: @4]) {
        return self.name = @"Square";
    }
    else if([self.numberOfSides isEqual: @5]) {
        return self.name = @"Pentagon";
    }
    else if([self.numberOfSides isEqual: @6]) {
        return self.name = @"Hexagon";
    }
    else if([self.numberOfSides isEqual: @7]) {
        return self.name = @"Heptagon";
    }
    else if([self.numberOfSides isEqual: @8]) {
        return self.name = @"Octagon";
    }

    return [NSString stringWithFormat:@"%@", self.name ];
}

@end

这是主文件

NSLog(@"Enter a number from between 3-8");

int user;

scanf("%d" , &user);

switch (user) {
    case 3:
    {
        shape *myShape = [[shape alloc]init];
        [myShape setNumberOfSides:3];
        [myShape setColour:@"Red"];
        id s2 = [myShape calculatedName];


        NSLog(@"The %@ shape has %i sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
        break;
    }
    case 4:
    {
        {
            shape *myShape = [[shape alloc]init];
            [myShape setNumberOfSides:@4];
            [myShape setColour:@"Blue"];
            id s2 = [myShape calculatedName];

            NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
            break;
        }
    case 5:
        {
            shape *myShape = [[shape alloc]init];
            [myShape setNumberOfSides:@5];
            [myShape setColour:@"Orange"];
            id s2 = [myShape calculatedName];

            NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
            break;
        }
    case 6:
        {
            shape *myShape = [[shape alloc]init];
            [myShape setNumberOfSides:@6];
            [myShape setColour:@"Purple"];
            id s2 = [myShape calculatedName];

            NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
            break;
        }
    case 7:
        {
            shape *myShape = [[shape alloc]init];
            [myShape setNumberOfSides:@7];
            [myShape setColour:@"Green"];
            id s2 = [myShape calculatedName];

            NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
            break;
        }
    case 8:
        {
            shape *myShape = [[shape alloc]init];
            [myShape setNumberOfSides:@8];
            [myShape setColour:@"Pink"];
            id s2 = [myShape calculatedName];

            NSLog(@"The %@ shape has %@ sides and is called a %@", [myShape colour], [myShape numberOfSides], s2);
            break;
        }

    }
    default:
        NSLog(@"Shape not found!");
        break;
}

1 个答案:

答案 0 :(得分:11)

numberOfSides不是对象,而是基本数据类型int,而不是:

int *numberOfSides;

你真的想要:

int numberOfSides;

而不是像你的if语句

if ([self.numberOfSides isEqual: @3]) ...

你想要

if (self.numberOfSides == 3) ...

并且,您的电话如下:

[myShape setNumberOfSides:@4];

应该是:

[myShape setNumberOfSides:4];

(你为“3”而做了这个,但其余部分没有。)

底线,用整数替换所有数字文字(NSNumber个对象),并用isEqual替换任何==