[英]Can you cast an NSString to an NSInterger? if the String contains numbers only?
我有一些数字存储在NSString中。
这样将它们提取到NSInterger中是否安全:
NSString* path = [[NSBundle mainBundle] pathForResource:@"rugby" ofType:@"txt" inDirectory:@""];
NSString* data = [NSString stringWithContentsOfFile:path encoding: NSUTF8StringEncoding error: NULL];
NSMutableArray *statsHolder = [[NSMutableArray alloc] init];
[statsHolder addObject:[NSString [data substringWithRange:NSMakeRange(0, 3)] integerValue]];
我是否误解了该怎么做?
我的第二个问题是关于对象的。 我正在尝试复制对象。 我担心如果我将一个对象复制到一个数组中,然后稍后更改复制到该数组中的对象中包含的值,则该数组中的对象也将更改该值,因为它只是指向原始对象的指针。 我演示了我在代码中的意思,因为它很难弄清楚。
else if ([newString isEqualToString: newline])
{
[statsHolder addObject:[[data substringWithRange:NSMakeRange(i-rangeCount, rangeCount)] integerValue]];
commaCount=0;
rangeCount=0;
Card *myCard = [[Card alloc] init];
myCard.name = nameHolder;
myCard.information = infoHolder;
for (int x = 0; x < [statsHolder count]; x++)
{
[myCard.statsArray addObject:[statsHolder objectAtIndex:x]];
}
[deckArray addObject:myCard];
[myCard autorelease];
[statsHolder removeAllObjects];
}
您可以在上方看到我正在填充名为Card *mycard
的对象,然后将其复制到我的NSMutableArray *deckArray
。
NSString *nameHolder = @"";
NSString *infoHolder = @"";
NSMutableArray *statsHolder = [[NSMutableArray alloc] init];
是我的var在我收集数据时保存数据,然后才足以填充Card对象并将其复制到数组中吗?
所以我的问题是..我所有存储在数组中的Card对象都将指向包含在其中的最后一个值吗?
NSString *nameHolder = @"";
NSString *infoHolder = @"";
NSMutableArray *statsHolder = [[NSMutableArray alloc] init];
因为数组和指针的工作方式?
很抱歉提出一个复杂的大问题。 :)
-码
是的,要将NSString转换为NSInteger, -integerValue
是正确的方法。 但是 ,NSInteger不是Objective-C对象类型。 因此,它不能存储在NSArray中。 您必须在NSNumber后面加上整数,即
NSInteger theValue = [[data substringWithRange:NSMakeRange(0,3)] integerValue]; NSNumber* boxedValue = [NSNumber numberWithInteger:theValue]; [statsHolder addObject:theValue];
只需使用[NSString integerValue]
属性即可从字符串获取int值。 然后,您可以将其存储在TheValue
的变量中,并将其作为int或NSNumber放入数组中。 我不确定NSInteger是否可以进入数组,除非它在NSDictionary中。
integerValue
方法是将字符串转换为整数的完美方法。 NSScanner
是另一种方法,特别是如果您打算在字符串中存储多个int(可能用逗号分隔),则NSScanner
。
NSScanner *scanner = [NSScanner scannerWithString:someString];
NSInteger number1, number2;
[scanner scanInteger:&number1]; // Copy the first int
[scanner scanString:@"," intoString:NULL]; // Skip the comma
[scanner scanInteger:&number2]; // Copy the second int
您需要先将数字包装在某种对象中,然后再将其放入数组中。 NSNumber
为此目的而设计:
[myArray addObject:[NSNumber numberWithInteger:number1]];
最后,在Card类上设置属性时会发生什么取决于声明属性或编写方法的方式。 对于字符串,通常将其复制是一个好主意:
@interface Card : NSObject
{
// …
}
@property (nonatomic, copy) NSString *name;
@end
现在,当您card.name = xyz
,该卡将存储xyz
的副本。 如果原始文件被修改或发布,则不会影响您卡的字符串副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.