2009-10-22 9 views
1

Ceci est une question de suivi sur mes premières questions concernant la récupération des données sur plist. En ce moment j'ai réussi à détecter les touches d'utilisateurs faites sur ma vue avec l'appel d'image aléatoire (merci à phytonquick).Une question sur la façon d'obtenir des données de plist et comment devrait-il être mise en page

CGPoint currentTouchLocation = [currentTouch locationInView:self]; 

Im ayant du mal maintenant sur la façon de comparer la valeur que je suis arrivé aux utilisateurs des touches faites sur l'image aléatoire dans la vue de celui enregistrer à l'intérieur des données plist avec le même nom que l'image aléatoire les utilisateurs des touches . Je sais comment calculer la distance tactile afin que je puisse ajuster les points de vie.

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

Aussi je ne sais pas comment devrais-je construire mes données de plist. J'ai lu plusieurs livres avec un échantillon de celui-ci (comme le "iphone 3 dev") mais je ne peux pas le comprendre spécialement quand la plupart des échantillons que j'ai vu sont à des fins de table. Voici comment je dispose mon 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 

Quelqu'un peut-il me diriger vers le bon chemin sur comment dois-je faire cela. Je vous remercie.

Répondre

0

Regardez dans la documentation -initWithContentsOfFile:

Vous devriez être en mesure de créer des dictionnaires et des tableaux de plists, à condition qu'ils soient standard.

Dans ce cas, vous pouvez appeler [[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist"]; Et vous pouvez ensuite utiliser -valueForKey: pour obtenir les données dont vous avez besoin.

4

Voici deux méthodes pour lire et écrire des valeurs d'un plist en utilisant un 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; 
} 

puis dans votre bloc de code quelque part:

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

Vous avez des conventions mal. Le préfixe "get" signifie que le résultat est passé par référence (c'est-à-dire que vous passez un pointeur en paramètre et que la méthode remplit le paramètre). De plus, vous renvoyez un NSMutableDictionary avec un nombre de retenues de +1, que vous fuyez après avoir lu la clé dans le dictionnaire plist. Vous devriez l'appeler "mutableDictionaryFromPlist" et "return [propriétéListValues ​​autorelease];' –

+0

Oui, les habitudes C++ meurent durement certaines choses influencent encore mon codage dans d'autres langues. Je vais vous payer sur le pick-up autorelease cependant. –

+0

@Brock malgré les conventions manqués, c'est toujours une réponse solide. +1 –

1

Essayez ceci:

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

La partie plist est bien expliquée dans d'autres réponses.

Mais si vous stockez/lecture avec CGPoint Je fortement vous conseillons d'utiliser les très pratiques, méthodes suivantes CGPointFromString et NSStringFromCGPointsee Apple documentation for more information.

Remarque il y a également d'autres utilitaires pour travailler avec des structures graphiques comme CGPointEqualToPoint, CGRectContainsPoint, CGRectIntersectsRect ou CGRectContainsRect ... see Apple documentation for more information

Questions connexes