A question on how to Get data from plist & how should it be layout

血红的双手。 提交于 2019-11-28 10:23:08

问题


This is a follow up question on my first queries regarding retrieving data on plist. Right now i have manage to detect users touches made on my view with random image call out (thanks to phytonquick).

CGPoint currentTouchLocation = [currentTouch locationInView:self];  

Im having trouble now on how to compare the value i got from the users touches made on the random image in the view to the one save inside the plist data with the same name as the random image the users touches. I know how to calculate the touch distance so i could adjust the hit points.

-(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.");
    }
}

Also I dont know on how should i construct my plist data. I've read several books with sample of it (like the "iphone 3 dev") but i cant figure it out specially when most of the samples i saw are for tableview purposes. This is how i layout my 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

Could someone please direct me to the right path on how should i do this. Thank you.


回答1:


Here are two methods to read and write values from a plist using an 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;
}

and then in your code block somewhere:

// 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];



回答2:


Try this:

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



回答3:


Look into the documentation for -initWithContentsOfFile:

You should be able to create dictionaries and arrays from plists, provided that they are standard.

In this case, you can call [[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist"]; And then you can use -valueForKey: to get the data you need.




回答4:


The plist part is well explained in other answers.

But if you are storing/reading with CGPoint I would strongly suggest you to use the following very handy methods, CGPointFromString and NSStringFromCGPoint see Apple documentation for more information.

Note there are also other utilities to work with graphics structures like CGPointEqualToPoint, CGRectContainsPoint, CGRectIntersectsRect or CGRectContainsRect... see Apple documentation for more information



来源:https://stackoverflow.com/questions/1605310/a-question-on-how-to-get-data-from-plist-how-should-it-be-layout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!