Я вырываю голову из-за этого .. Я не знаю, что происходит не так.
Я создал очень простой класс Coordinates2D для хранения двух значений NSInteger, а также строкового представления.для использования с NSLog.Я запускаю этот код в симуляторе iOS 4.3 для iPad в комплекте с последней версией xCode.
По некоторым причинам целочисленные значения, передаваемые конструктору initX: Y: теряются.Приведенный ниже код предоставляет Coordinates2D и некоторый код для печати произвольного значения с плавающей точкой в исходной форме, приведенного к типу int, приведенного к типу NSInteger, а затем внутри объекта Coordinates2D.
Вы должны увидеть, как я,что значение теряется внутри конструктора Coordinates2D;аргумент'ordins.x 'в NSLog выводится как случайное большое целое число, указывающее, что его значение потеряно в памяти.
Может кто-нибудь помочь мне понять, почему это происходит?Я не вижу, что я делаю неправильно.
Большое спасибо!
Coordinates2D.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
Coordinates2D.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);