J'ai un magasin avec des entités qui ont des coords (x, y, z). Je veux les récupérer en utilisant un prédicat comme @ "sqrt (x x + y y + z * z) < distance".Existe-t-il un moyen d'utiliser des fonctions dans NSPredicate predicateWithFormat:
Y at-il un moyen de le faire?
J'ai essayé de le faire avec thi predicateWithFormat:
J'ai même écrit beaucoup de code qui ressemble à
NSExpression * dxExpression = [NSExpression expressionForFunction:@"from:subtract:"
arguments:[NSArray arrayWithObjects:
[NSExpression expressionForConstantValue: [NSNumber numberWithFloat:currX]],
[NSExpression expressionForKeyPath:@"self.xCoord"], nil]
];
NSExpression * dxSqrExpression = [NSExpression expressionForFunction:@"multiply:by:"
arguments:[NSArray arrayWithObjects:dxExpression, dxExpression, nil]
];
Mais il ne fonctionne que pour les expressions non hiérarchiques. I.e., donc dxExpression fonctionne très bien, mais quand je suis en train d'utiliser dxSqrExpression, j'obtiens l'erreur
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: 'Unsupported function expression (-140.857 - #self.xCoord) * (-140.857 - #self.xCoord)'
J'ai essayé sans moi, mais cela ne fonctionne pas trop.
Toute aide sera appréciée, merci.
Ok c'est bien vieux, mais je vais encore ajouter mon grain de sel depuis que je viens de rencontrer dans ce même problème. La solution de Nathan fonctionne mais si le magasin est grand, il peut devenir cher. Une façon d'optimiser consiste à utiliser d'abord un NSPredicate qui renvoie les résultats dans une boîte englobante au lieu de la sphère englobante que vous recherchez vraiment. Ensuite, vous pouvez utiliser la méthode de filtrage proposée par Nathan pour gagner en précision. – mprivat