2011-11-16 3 views
1

J'essaie de trouver un moyen de stocker un CGPoint dans une base de données Core. Après avoir parcouru les pages, j'ai trouvé quelque part qu'une façon de le faire serait d'avoir une Entité (Point2D dans mon cas) avec les attributs x et y. Les deux flottants sont mappés à NSNumber.Stocker efficacement CGPoint dans les données de base

Le problème est que pour obtenir le point de retour, j'ai la méthode suivante de mon Point2D NSManagedObject sublass:

- (CGPoint) cgPointValue { 
    return CGPointMake([self.x floatValue], [self.y floatValue]); 
} 

Et cela fonctionne, mais comme je l'ai beaucoup de points, il semble être monopolisant le CPU.

Je me demande s'il existe un moyen plus efficace de le faire.

Répondre

8

Je pense qu'il n'y a pas moyen de gagner du temps CPU dans ce cas, un événement avec le code ci-dessous, il fera même chose, peut-être moins peut-être plus:

// >>> Saving result string int CoreData 
CGPoint point = CGPointMake(20.0f, 20.f); 
NSString *pointToSavae = NSStringFromCGPoint(point); // Will store string {20,20} 

// >> Restoring point from string, retrieved from CoreData 
CGPoint pointFromString = CGPointFromString(pointToSavae); 
+0

Ok, merci. Je l'ai en quelque sorte fixé le CGPoint généré dans un ivar (NSValue) et vérifié s'il existait avant de le générer de nouveau. Puis sur willChangeValueForKey: J'ai mis l'ivar à zéro. Alors maintenant, il ne le génère que quand il change. – Odrakir

Questions connexes