关于如何从plist&获取数据的问题应该如何布局

时间:2009-10-22 06:13:15

标签: iphone arrays plist coordinates nsdictionary

这是关于在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.");
    }
}

另外,我不知道如何构建我的plist数据。我已经阅读了几本带有样本的书(比如“iphone 3 dev”),但是当我看到的大部分样本都是用于查看目的时,我无法弄清楚。这是我布置我的plist的方式:

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 个答案:

答案 0 :(得分:4)

以下是使用NSDictionary从plist读取和写入值的两种方法:

- (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 :(得分:1)

试试这个:

-(void)add:(NSRunningApplication *) app { 
if ([self contains:app]) return; 
[self.apps addObject:app.localizedName]; 
 [self.apps writeToFile:self.dataFile atomically:YES];
}

答案 2 :(得分:0)

查看-initWithContentsOfFile:

的文档

您应该能够从plists创建字典和数组,只要它们是标准的。

在这种情况下,您可以致电[[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist"];然后您可以使用-valueForKey:来获取所需的数据。

答案 3 :(得分:0)

在其他答案中,plist部分得到了很好的解释。

但如果您使用CGPoint存储/阅读,我会强烈建议您使用以下非常方便的方法,CGPointFromString和{ {1}} see Apple documentation for more information

请注意,还有其他实用程序可以处理图形结构,例如NSStringFromCGPointCGPointEqualToPointCGRectContainsPointCGRectIntersectsRect ... see Apple documentation for more information