2010-09-11 3 views
0

У меня есть некоторые номера, хранящиеся в NSString.Можете ли вы наложить NSString на NSInterger? если строка содержит только цифры?

Безопасно извлечь их в 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]]; 

Am я недоразумений, как это сделать, или это будет действительным?

Мой второй вопрос касается объектов. Я пытаюсь скопировать объекты. Я волнуюсь, что если я скопирую объект в массив, а затем изменим значение, содержащееся в объекте, который был скопирован в массив, объект, который в массиве также изменит значение, поскольку это всего лишь указатель на исходный объект , Я демонстрирую, что я имею в виду в коде, так как его трудно понять.

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

ли мои вары для хранения данных в то время как я собирать ее, прежде чем достаточно, чтобы заполнить объект карты и скопировать его в массив.

Так что мой вопрос .. Будут ли все объекты карты хранятся в массиве все это указывает на последних значений, которые содержались в

NSString *nameHolder = @""; 
NSString *infoHolder = @""; 
NSMutableArray *statsHolder = [[NSMutableArray alloc] init]; 

Из-за способа массивы и указатели работы?

Извините, что задал большой сложный вопрос. :)

-кода

+0

Хммм, если вы задаете вопрос по двум отдельным темам, вероятно, вам следует открыть отдельные вопросы по каждой теме. – BoltClock

+0

Я не понимаю ваш второй вопрос. – kennytm

ответ

1

Метод integerValue - прекрасный способ преобразования строки в целое число. Другой способ, особенно если вы планируете хранить несколько целых строк в строке (возможно, разделенных запятой), - это 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]]; 

Наконец, что происходит, когда вы устанавливаете свойства вашего класса карты зависит от того, как вы объявили свойство или писали методы.Когда дело доходит до строк, обычно это хорошая идея, чтобы скопировать их:

@interface Card : NSObject 
{ 
// … 
} 
@property (nonatomic, copy) NSString *name; 
@end 

Теперь, когда вы card.name = xyz, карта будет хранить копию xyz. Если оригинал изменен или выпущен, это не повлияет на копию вашей строки.

+0

: o Итак, что означает копия? Удивительный :) TY – 2010-09-11 20:27:13

1
  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]; 
    
1

Просто используйте [NSString integerValue] свойство, чтобы получить значение INT из строки. Затем вы можете сохранить это в переменной, как TheValue, и поместить ее в свой массив как int или NSNumber. Я не уверен, может ли NSInteger войти в массив, если он не находится в NSDictionary.

Смежные вопросы