簡體   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