繁体   English   中英

您可以将NSString强制转换为NSInterger吗? 如果字符串仅包含数字?

[英]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];

因为数组和指针的工作方式?

很抱歉提出一个复杂的大问题。 :)

-码

  1. 是的,要将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM