我为此撕毁了我的头发。我不知道出了什么问题。
我创建了一个非常简单的 Coordinates2D 类来存储两个 NSInteger 值,以及一个用于 NSLog 的字符串表示形式。我在与最新版本的 xCode 捆绑的 iOS 4.3 iPad 模拟器中运行此代码。
由于某种原因,传递给 initX:Y: 构造函数的整数值丢失了。下面的代码提供 Coordinates2D 和一些代码,以原始形式打印任意浮点值,转换为 int,转换为 NSInteger,然后在 Coordinates2D 对象中。
您应该像我一样看到该值在 Coordinates2D 构造函数中丢失了;NSLog 中的 'coords.x' 参数被打印为一个随机的大整数,表明它的值已在内存中丢失。
谁能帮我看看为什么会这样?我看不出我做错了什么。
非常感谢!
坐标2D.h
#import <Foundation/Foundation.h>
@interface Coordinates2D : NSObject {
NSInteger x,y;
NSString *asString;
}
@property (nonatomic) NSInteger x,y;
@property (nonatomic, retain) NSString *asString;
-(void)updateStringRepresentation;
-(id)initX:(NSInteger)x Y:(NSInteger)y;
@end
坐标2D.m
#import "Coordinates2D.h"
@implementation Coordinates2D
@synthesize x,y,asString;
-(id)initX:(NSInteger)x_ Y:(NSInteger)y_ {
NSLog(@"coords: %i, %i",x_,y_);
if ((self = [super init])) {
self.x = x_;
self.y = y_;
NSLog(@"Coordinates stored %i as %i",x_,self.x);
[self updateStringRepresentation];
}
return self;
}
/*
-(void)setX:(NSInteger)newX {
x = newX;
[self updateStringRepresentation];
}
-(void)setY:(NSInteger)newY {
y = newY;
[self updateStringRepresentation];
}
*/
-(void)updateStringRepresentation {
self.asString = [NSString stringWithFormat:@"%i,%i",x,y];
}
-(void)dealloc {
[asString release];
[super dealloc];
}
@end
问题示例:
Coordinates2D *coords = [[Coordinates2D alloc] initX:(NSInteger)(202.566223/200.00) Y:0.0f];
NSLog(@"202.566223/200.00 = %f, as int:%i, as NSInteger:%i, as Coordinates2D:%i",
202.566223/200.00, (int)(202.566223/200.00), (NSInteger)(202.566223/200.00), coords.x);