2013-04-29 5 views
0

Я сохраняю два CGPoints (в массиве) в текстовый файл в каталоге Documents. Когда я прочитал файл, это то, что я получаю:Чтение NSPoint из текстового файла

NSPoint: {66.5, 87}, NSPoint: {198.5, 314.5} 

Как получить такой вывод:

66.5 87 
198.5 314.5 

Вот мой код:

//save the coordinates of two points into a text file in the Documents directory 
- (void)savePoints 
{ 
    //get Document directory's path 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"POINTS.txt"]; 

    //create an points array 
    NSMutableArray *points = [[NSMutableArray alloc] init]; 
    [points addObject:[NSValue valueWithBytes:&fromPoint objCType:@encode(CGPoint)]]; //insert object at the end of the array 
    [points addObject:[NSValue valueWithBytes:&toPoint objCType:@encode(CGPoint)]]; 

    //write points array to file 
    BOOL result = [NSKeyedArchiver archiveRootObject:points toFile:fullPath]; 
    NSLog(@"Archival result: %d", result); 
} 

//read the file 
-(void)getPoints 
{ 
    //get Document directory's path 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"POINTS.txt"]; 

    //read points array from file 
    NSMutableArray *points = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 
    NSString *str = [points componentsJoinedByString:@","]; 
    NSLog(@"%@", str); 
} 
+1

Может у объяснить ур вопрос немного .. У-у нужно преобразовать строку в CGPoint? – Dany

ответ

3

У вас есть строка кода, который принимает массив из двух точек, а затем преобразует его в строку:

NSString *str = [points componentsJoinedByString:@","]; 

Это дает Вам:

NSPoint: {66.5, 87},NSPoint: {198.5, 314.5} 

Вам доведется делать это в методе getPoints, но вы получили бы тот же результат, если бы сделали это в методе savePoints. Ваша проблема не имеет ничего общего с сохранением файла или извлечением из файла. Это всего лишь вопрос о том, как вы хотите извлечь значения CGPoint из вашего массива points.

Итак, если вы хотите, чтобы ваши два очка обратно (я полагаю, это реальная цель), вы могли бы сделать что-то вроде:

CGPoint fromPoint = [[points objectAtIndex:0] CGPointValue]; 
CGPoint toPoint = [[points objectAtIndex:1] CGPointValue]; 

Или вы могли бы, используя последние версии компилятора, делать:

CGPoint fromPoint = [points[0] CGPointValue]; 
CGPoint toPoint = [points[1] CGPointValue]; 

Или вы могли бы сделать что-то вроде:

for (NSValue *value in points) 
{ 
    CGPoint point = [value CGPointValue]; 
    NSLog(@"point = %.1f, %.1f", point.x, point.y); 
} 

Тогда вы можете делать все, что йо вы хотите с двумя вашими очками.

+0

Это можно сделать легко, используя CGPointFromString и NSStringFromCGPoint. Просто для обмена информацией. –

+0

@JanakNirmal Да, я знаю эти функции. Но это (как и большинство других ответов) игнорирует тонкую точку, что, хотя вопрос был похож на форматирование строкового значения, можно сделать вывод, что реальный вопрос заключался в извлечении значений «CGPoint» из массива, а ОП получил немного перепутаны в процессе записи и чтения из файла. Вот почему я использовал более громоздкий синтаксис 'point.x' и' point.y' в 'NSLog', чтобы сделать его очень явным, как получить значения. Когда я регистрирую значения 'CGPoint', я всегда использую' NSStringFromCGPoint', но здесь только облака. – Rob

+0

Полностью согласен с тем, что +1: D –

1

попробовать, как это может be it'l поможет вам,

NSString * val = @"NSPoint: {66.5, 87}, NSPoint: {198.5, 314.5}"; 
NSString * strippedNumber = [val stringByReplacingOccurrencesOfString:@"[^.,0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [val length])]; 
    NSLog(@"%@", strippedNumber); 
+0

как только проверьте его сейчас. – Balu

+0

две точки от события касания, поэтому они продолжают меняться. Мне нужно снять его во время чтения. – askingtoomuch

+0

ok Нет проблем, вы можете передать динамическую строку после получения каждой точки. – Balu

1

В Xcode окно с документацией, поиск по «NSValueUIKit Справочник по дополнениям» (или google it).

Вы можете прямо encodeCGPoint(+ (NSValue *)valueWithCGPoint:(CGPoint)point) и decode его с (- (CGPoint)CGPointValue).

2

попробовать это

 NSString *[email protected]"{66.5, 87}"; 
    CGPoint myPoint = CGPointFromString([NSString stringWithFormat:@"%@",strCG]);//StrCG is your Strin 
    ScrollObj.contentOffset=myPoint; 
2

Хорошо вы получили ответ, но все же для удобства процесса проводки этот ответ, попробуйте использовать NSStringFromCGPoint и CGPointFromString

//save the coordinates of two points into a text file in the Documents directory 
- (void)savePoints 
{ 
    //get Document directory's path 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@"POINTS.txt"]; 

    CGPoint fromPoint = CGPointMake(66.5, 87); 
    CGPoint toPoint = CGPointMake(198.5, 314.5); 

    //create an points array 
    NSMutableArray *points = [[NSMutableArray alloc] init]; 
    [points addObject:NSStringFromCGPoint(fromPoint)]; //Create string from CGPoint 
    [points addObject:NSStringFromCGPoint(toPoint)]; //Create string from CGPoint 

    //write points array to file 
    BOOL result = [NSKeyedArchiver archiveRootObject:points toFile:fullPath]; 
    NSLog(@"Archival result: %d", result); 
} 

//read the file 
-(void)getPoints 
{ 
    //get Document directory's path 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"POINTS.txt"]; 

    //read points array from file 
    NSMutableArray *points = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 
    for (NSString *point in points) { 
     CGPoint tmpPoint = CGPointFromString(point); //Create CGPoint from NSString 
     NSLog(@"%f %f",tmpPoint.x,tmpPoint.y); 
    } 
} 
Смежные вопросы