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