Ours avec moi, celui-ci est difficile à expliquer. J'espère qu'un héros sait ce qui se passe ici. Un peu d'histoire nécessaireProblème Cocoa Confound - le programme se bloque sauf s'il y a un appel de méthode non reconnu
Un de mes objets cacao, "Ball" représente un petit graphique. Cela n'a de sens que dans une vue. Dans certaines méthodes de la boule, il demande à la vue de redessiner. Plus important encore, il demande à la vue de redessiner chaque fois que le paramètre de position de la balle est défini. Ceci est réalisé dans le setter.
est ici la bouche pleine, comme le suggère:
Dans View.m
- (void)mouseUp:(NSEvent *)theEvent {
if (![runnerPath isEmpty]) {
[walkPath removeAllPoints];
[walkPath appendBezierPath:runnerPath];
[runnerPath removeAllPoints];
[[self held] setStep:0];
[[self held] setPath:walkPath];
[NSTimer scheduledTimerWithTimeInterval:.01 target:[self held] selector:@selector(pace) userInfo:nil repeats:YES];
}
}
Dans Ball.m
- (void)pace {
CGFloat juice = 10;
BOOL loop = YES;
while (loop) {
if ([self step] == [[self path] elementCount]) {
if ([[self timer] isValid]) {
[[self timer] invalidate];
}
[[self path] removeAllPoints];
// @throw([NSException exceptionWithName:@"test" reason:@"reason" userInfo:nil]);
}
if (loop) {
CGFloat distance;
NSPoint stepPoint;
if ([[self path] elementCount] > 0) {
NSPoint returnPoints[2];
[[self path] elementAtIndex:[self step] associatedPoints:returnPoints];
stepPoint = returnPoints[0];
distance = pixelDistance([self position], stepPoint);
}
if (distance <= juice) {
[self setPosition:stepPoint];
if (distance < juice) {
juice -= distance;
loop = YES;
[self setStep:[self step]+1];
} else {
loop = NO;
}
} else {
NSPoint cutPoint = moveAlongBetween([self position], stepPoint, juice);
[self setPosition:cutPoint];
loop = NO;
}
}
}
}
Avez-vous essayé d'exécuter votre application dans le débogueur, puis d'interrompre l'exécution lorsque le blocage se produit et d'examiner la pile d'appels? – sbooth
Quel niveau d'optimisation utilisez-vous? Je me demande si la boucle vide avec l'utilisation de '-allObjects' est supprimée par le compilateur. –
En regardant le débogueur maintenant, et googling frénétiquement. Je suis embarrassant peu familier avec comment cela fonctionne. Merci pour votre aide, de toute façon. Je vais voir ce que je peux faire de la pile d'appels. –