这是关于在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
有人可以指导我如何做到这一点的正确道路。谢谢。
答案 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。
请注意,还有其他实用程序可以处理图形结构,例如NSStringFromCGPoint
,CGPointEqualToPoint
,CGRectContainsPoint
或CGRectIntersectsRect
... see Apple documentation for more information