2009-09-04 2 views
1

Сохранение данных:Преобразование NSNumbers, сохраненные в PLIST для целых

- (NSString *)dataFilePath 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
return [documentsDirectory stringByAppendingPathComponent:kFilename]; 
} 
- (void)applicationWillTerminate:(NSNotification *)notification 
{ 
NSMutableArray *array = [[NSMutableArray alloc] init]; 

NSNumber *number = [NSNumber numberWithInt:points]; 
    [array addObject:number]; 

    [array writeToFile:[self dataFilePath] atomically:YES]; 
    [array release]; 
} 

Чтение данных: BestLabel.text покажет высокий балл. Я получаю предупреждение: «назначение делает целое число от указателя без приведения»

-(void)LoadData{ 
BestLabel.center = CGPointMake(150,300); 

NSString *filePath = [self dataFilePath]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{ 
    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 
    loadint = [array objectAtIndex:0]; 
    NSString *myString35 = [NSString stringWithFormat:@"%d", loadint]; 
    BestLabel.text = myString35; 
    [array release]; 
} 
} 

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

РЕДАКТИРОВАТЬ:

- (void)applicationWillTerminate:(NSNotification *)notification 

{ NSMutableArray * массив = [[NSMutableArray Alloc] инициализации];

if (points > highscore){ 

    NSString *myString35 = [NSString stringWithFormat:@"%d", points]; 
    [array addObject:myString35]; 
}else { 
    NSString *myString35 = [NSString stringWithFormat:@"%d", highscore]; 
    [array addObject:myString35]; 
} 


NSNumber *number = [NSNumber numberWithInt:GreenBlot.center.x]; 
[array addObject:number]; 
NSNumber *number2 = [NSNumber numberWithInt:GreenBlot.center.y]; 
[array addObject:number2]; 

А теперь загружается с:

NSString *filePath = [self dataFilePath]; 
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
{ 
    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath]; 
    BestLabel.text = [array objectAtIndex:0]; 
    highscore = [[array objectAtIndex:0] intValue]; 


    lx = [[array objectAtIndex:1] intValue]; 
    ly = [[array objectAtIndex:2] intValue]; 
    GreenBlot.center = CGPointMake(lx,ly); 


    [array release]; 
} 

лк и Ly являются целыми числами. Я сначала попробовал CGPointMake ([[array objectAtIndex: 1] intValue], [[array objectAtIndex: 2] intValue]). Те же результаты, GreenBlot центрируется на 0,0. Любая идея почему?

+0

Является ли loadint int или NSNumber? – mahboudz

ответ

2

Проще всего сделать, это использовать NSNumber «s intValue метод:

loadint = [[array objectAtIndex:0] intValue]; 
+0

Попытка это .. см. Главное сообщение. Попытка установить CGPointMake с intValues ​​только дает мне 0,0. – user128526

+0

1. Какую переменную возвращает GreenBlot.center.x? 2. Какие переменные являются lx и ly? –

1

Вам нужно вторую строчку ниже:

loadint = [array objectAtIndex:0]; 
int score = [loadint intValue]; 
NSString *myString35 = [NSString stringWithFormat:@"%d", loadint]; 

Если вы только экономить одно значение, а затем использовать NSDictionary с ключом, который облегчает вам маркировку значения, которое вы сохраняете.

+0

незначительная коррекция: [loadint integerValue] возвращает 'NSInteger', который (в зависимости от системы) может быть или не быть' int'. Вы либо хотите изменить вызов метода на 'intValue', либо изменить тип' score' на 'NSInteger'. –

+0

спасибо. Изменено. – mahboudz

0

CGPointMake определяется:

CGPoint CGPointMake(
    float x, 
    float y 
) 

Вы принимаете GreenBlot.center.x, который предположительно поплавок и подачи его в NSNumber как междунар .... Вернитесь назад и посмотреть на типы ваших переменных и измените на [NSNumber numberWithFloat: ...] и lx = [[array objectAtIndex: 1] floatValue]; и т.д., в зависимости от ситуации.

Кроме того, вы создали другой вопрос при редактировании исходного вопроса.

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