Вопрос о том, как получить данные из plist и каким должен быть макет - PullRequest
1 голос
/ 22 октября 2009

Это следующий вопрос по моим первым запросам, касающийся извлечения данных из plist. Прямо сейчас мне удалось обнаружить касания пользователей, сделанные на мой взгляд, с помощью случайного вызова изображения (благодаря phytonquick).

CGPoint currentTouchLocation = [currentTouch locationInView:self];  

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

-(CGFloat) distanceBetween: (CGPoint) point1 and: (CGPoint)point2

   NSMutableDictionary *????? = [self loadDictionaryFromPList: @"?????"];
NSNumber *1stXCoordinate = [????? objectForKey:@"1stXCoordinate"];
NSNumber *1stYCoordinate = [????? objectForKey:@"1stYCoordinate"];
if (1stXCoordinate && 1stYCoordinate)
{
    CGPoint 1stTouchLocation = CGPointMake([lastXCoordinate floatValue], [lastYCoordinate floatValue]);
    CGFloat distanceBetweenTouches = [self distanceBetween: currentTouchLocation and: 1stTouchLocation];
    if (distanceBetweenTouches < 20)
    {
        // do something here 
        NSLog(@"You hit it.");
    }
}

Кроме того, я не знаю, как мне составить свои списки данных. Я прочитал несколько книг с образцом (например, «iphone 3 dev»), но я не могу понять это специально, когда большинство примеров, которые я видел, предназначены для целей таблицы. Вот как я размещаю свой лист:

randImage <-- callout array
    p1.jpg <-- image represented by array
        tap1 <-- Array
            item 1 - x1 coordinate <-- Number
            item 2 - y1 coordinate <-- Number
            item 3 - x2 coordinate <-- Number
            item 4 - y2 coordinate <-- Number
            item 5 - x3 coordinate <-- Number
            item 6 - y3 coordinate <-- Number
        tap2 <-- Array
            item 1 - x1 coordinate <-- Number
            item 2 - y1 coordinate <-- Number
            item 3 - x2 coordinate <-- Number
            item 4 - y2 coordinate <-- Number
    p2.jpg <-- image represented by array
        tap1
            item 1....etc

Может ли кто-нибудь, пожалуйста, направить меня на правильный путь, как мне это сделать. Спасибо.

Ответы [ 4 ]

4 голосов
/ 24 октября 2009

Вот два метода для чтения и записи значений из plist с использованием NSDictionary:

- (NSMutableDictionary*)dictionaryFromPlist {
    NSString *filePath = @"myPlist.plist";
    NSMutableDictionary* propertyListValues = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
    return [propertyListValues autorelease];
}

- (BOOL)writeDictionaryToPlist:(NSDictionary*)plistDict{
    NSString *filePath = @"myPlist.plist";
    BOOL result = [plistDict writeToFile:filePath atomically:YES];
    return result;
}

и затем в вашем блоке кода где-то:

// Read key from plist dictionary
NSDictionary *dict = [self dictionaryFromPlist];
NSString *valueToPrint = [dict objectForKey:@"Executable file"];
NSLog(@"valueToPrint: %@", valueToPrint);

// Write key to plist dictionary
NSString *key = @"Icon File";
NSString *value = @"appIcon.png";
[dict setValue:value forKey:key];

// Write new plist to file using dictionary
[self writeDictionaryToPlist:dict];
1 голос
/ 01 апреля 2011

Попробуйте это:

-(void)add:(NSRunningApplication *) app { 
if ([self contains:app]) return; 
[self.apps addObject:app.localizedName]; 
 [self.apps writeToFile:self.dataFile atomically:YES];
}
0 голосов
/ 01 апреля 2011

Плистская часть хорошо объяснена в других ответах.

Но если вы храните / читаете с CGPoint, я бы настоятельно предложил вам использовать следующие очень удобные методы, CGPointFromString и NSStringFromCGPoint см. Документация Apple для получения дополнительной информации .

Обратите внимание, что существуют также другие утилиты для работы с графическими структурами, такие как CGPointEqualToPoint, CGRectContainsPoint, CGRectIntersectsRect или CGRectContainsRect ... , см. Документацию Apple для получения дополнительной информации

0 голосов
/ 22 октября 2009

Смотрите документацию для -initWithContentsOfFile:

Вы должны иметь возможность создавать словари и массивы из списков при условии, что они являются стандартными.

В этом случае вы можете позвонить [[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist"]; И затем вы можете использовать -valueForKey:, чтобы получить необходимые данные.

...