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

4

1

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.

Nelsonnema answered 22/10, 2009 at 6:13 Comment(0)
G
4

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];
Goodwife answered 24/10, 2009 at 5:41 Comment(3)
You've got some conventions wrong. The "get" prefix means that the result is passed by reference (ie, you pass in a pointer as a parameter, and the method fills the parameter). Additionally, you're returning an NSMutableDictionary with a retain count of +1, which you're leaking after reading the key from the plist dictionary. You should call it "mutableDictionaryFromPlist" and return [propertyListValues autorelease];Marathon
Yes C++ habits die hard some things still influence my coding in other languages. I'll pay you on the autorelease pickup though.Goodwife
@Brock despite the missed conventions, it's still a solid answer. +1Marathon
U
1

Try this:

-(void)add:(NSRunningApplication *) app { 
if ([self contains:app]) return; 
[self.apps addObject:app.localizedName]; 
 [self.apps writeToFile:self.dataFile atomically:YES];
}
Unsuccessful answered 1/4, 2011 at 15:41 Comment(0)
S
0

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.

Sublunar answered 22/10, 2009 at 10:12 Comment(0)
J
0

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

Jubilate answered 1/4, 2011 at 15:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.