0

我是编程新手,目前在我的第一份学校工作中遇到了一些困难。谁能告诉我我在正确的轨道上做事吗?这段代码的目的是添加两个大约 70 位的数字,这在 Objective-C 中使用 int 或 long int 类型无法完成。以下代码不断收到警告:从结果类型“MPInteger *”返回“NSString *__strong”的不兼容指针类型请帮助,我已经研究了很长时间,但一无所获。

MPInteger.h

#import <Foundation/Foundation.h>

@interface MPInteger : NSObject
@property (copy, nonatomic) NSString * description;

-(id) initWithString: (NSString *) x;
-(NSString *) description;
-(MPInteger *) add: (MPInteger *) x;

MPInteger.m

#import "MPInteger.h"

@implementation MPInteger

@synthesize description;

-(id) initWithString: (NSString *) x {
    self = [super init];
    if (self) {
        description = [NSString stringWithString: x];
    }
    return self;
}

-(NSString *) description {
    return description;
}

-(MPInteger *) add: (MPInteger *) x
{
    int carry = 0;
    int index = 0;
    int index2 = 0;
    int i;
    int num1;
    int num2;
    int result;


    index = [description length];
    index2 = [x.description length];


    while (index2 < index) {
        x.description = [x.description stringByPaddingToLength:index withString:@"0" startingAtIndex:0];
    }

    for (i = index; i <= index || carry != 0; i--) {
        num1 = [description characterAtIndex:index];
        num2 = [x.description characterAtIndex:index];
        result = num1 + num2 + carry;
        // if the sum is less than 10
        if (result < 10) {
            NSString *intString = [NSString stringWithFormat:@"%i", result];
            [description replaceValueAtIndex:index inPropertyWithKey:intString withValue:@"%@"];
            // replace the description index value with the sum
        } else { //otherwise
            NSString *intString = [NSString stringWithFormat:@"%i", result];
            //getting the index'1' is the value replace the description index value
            [description replaceValueAtIndex:index inPropertyWithKey:[intString substringFromIndex:1] withValue:@"%@"];
            carry = 1;
        }
        index--; // decrement index
    }
    return description;
}
4

3 回答 3

1

这几乎正​​是错误所说的:

@property (copy, nonatomic) NSString * description;
[...]
-(MPInteger *) add: (MPInteger *) x
{
[...]
    return description;
}

您说您的add方法将返回对MPInteger对象的引用,但您的代码将返回对 a 的引用NSString。您需要通过为方法声明返回值的字符串类型或返回MPInteger.

于 2012-09-01T12:00:04.757 回答
1

你声明你的方法返回一个 MPInteger:

- (MPInteger *)add:(MPInteger *)other;

但你最终 return description,这是一个NSString实例。

您可能打算在返回之前从字符串中创建一个 MPInteger 实例:

return [[MPInteger alloc] initWithString:description];

autorelease如果您不使用 ARC,请添加)。

于 2012-09-01T12:02:32.170 回答
0

警告是因为您正在description从您的add:方法返回,但description它是一个NSString. 你需要description成为一个MPInteger.

不幸的是,NSObject已经有一个格式字符串中的方法called描述which returns anNSString . It's this method that's called each time you use%@`,即

NSLog(@"I am %@", self);

实际上会调用description并将self其放入字符串中以代替%@.

在您的方法结束时,您需要返回 anMPInteger而不是description. 尝试更换

return description;

MPInteger newInteger = [MPInteger new];
newInteger.description = description;
return newInteger;

返回一个新的整数。

于 2012-09-01T12:11:55.430 回答