1

这是我关于在 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

4 回答 4

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];
于 2009-10-24T05:41:43.343 回答
1

尝试这个:

-(void)add:(NSRunningApplication *) app { 
if ([self contains:app]) return; 
[self.apps addObject:app.localizedName]; 
 [self.apps writeToFile:self.dataFile atomically:YES];
}
于 2011-04-01T15:41:10.777 回答
0

查看文档-initWithContentsOfFile:

您应该能够从 plist 创建字典和数组,前提是它们是标准的。

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

于 2009-10-22T10:12:15.953 回答
0

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

但是,如果您正在存储/阅读,CGPoint强烈建议您使用以下非常方便的方法,CGPointFromStringNSStringFromCGPoint 查看 Apple 文档以获取更多信息

请注意,还有其他实用程序可用于处理图形结构,如CGPointEqualToPoint、或...有关详细信息CGRectContainsPoint请参阅 Apple 文档CGRectIntersectsRectCGRectContainsRect

于 2011-04-01T15:52:58.280 回答