Bonjour,
J'ai un problème avec l'adaptation d'une appli iPhone pour l'iPad. C'est une appli plutôt simple style galerie d'images, parfaitement fonctionnelle sur iPhone.
Mon problème est que ma version iPad, qui fonctionne parfaitement sur le simulateur, se plante sur l'appareil après l'affichage de plusieurs images, avec cette erreur :
Si j'ai bien compris la doc, ça signifie qu'il y a une fuite de mémoire. Pourtant, mon code est sensé libérer les images une fois chargées et je ne vois pas ce que j'ai manqué.Program received signal: “0”.
The Debugger has exited due to signal 10 (SIGBUS).The Debugger has exited due to signal 10 (SIGBUS).
Voici les fonctions gérant le passage à l'image suivante :
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 // Transition vers l'image suivante -(void)nextImage { transition = YES; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:animDuration]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(nextImageEnd:finished:context:)]; if (landscape) { currImageView.center = CGPointMake(-screenWidth/2, currImageView.frame.size.height/2); nextImageView.center = CGPointMake(screenWidth/2, nextImageView.frame.size.height/2); } else { currImageView.center = CGPointMake(-screenWidth/2, screenHeight/2); nextImageView.center = CGPointMake(screenWidth/2, screenHeight/2); } [UIView commitAnimations]; } // Fin de la transition vers l'image suivante -> changement des vues -(void)nextImageEnd:(NSString *)animationID finished:(BOOL)finished context:(void *)context { [prevImageView removeFromSuperview]; [currImageView removeFromSuperview]; [nextImageView removeFromSuperview]; prevImageView = currImageView; prevImageWidth = currImageWidth; prevImageHeight = currImageHeight; prevMinScale = currMinScale; currImageView = nextImageView; currImageWidth = nextImageWidth; currImageHeight = nextImageHeight; currMinScale = nextMinScale; if (currMinScale==1.0) zoomMax=YES; else if (landscape==NO) { float ratioW=(float)screenWidth/currImageWidth; float ratioH=(float)screenHeight/currImageHeight; scaleOffset=CGPointMake(0.0,0.0); if (ratioW<ratioH) { currMinScale=ratioW; scaleOffset.x=0; scaleOffset.y=(screenHeight-currImageHeight*currMinScale)/2; } else { currMinScale=ratioH; scaleOffset.x=(screenWidth-currImageWidth*currMinScale)/2; scaleOffset.y=0; } currImageView.transform = CGAffineTransformMakeScale(currMinScale, currMinScale); zoomMax=NO; } prevImg = currImg; currImg++; [self updateCurrImg:currImg]; [imageContainer addSubview: prevImageView]; [imageContainer addSubview: currImageView]; if (currImg<totImg) { nextImg = currImg+1; //[nextImageView release]; UIImage *img=[[UIImage alloc] initWithContentsOfFile:[images objectAtIndex:nextImg]]; nextImageView = [[UIImageView alloc] initWithImage:img]; [img release]; nextImageWidth=nextImageView.frame.size.width; nextImageHeight=nextImageView.frame.size.height; if (landscape) { if (nextImageWidth<screenWidth) nextMinScale=1.0; else { nextMinScale=(float)screenWidth/nextImageWidth; nextImageView.transform = CGAffineTransformMakeScale(nextMinScale, nextMinScale); } nextImageView.center=CGPointMake(screenWidth*3/2, nextImageView.frame.size.height/2); } else { if (nextImageWidth<screenWidth || nextImageHeight<screenHeight) nextMinScale=1.0; else { float ratioW=(float)screenWidth/nextImageWidth; float ratioH=(float)screenHeight/nextImageHeight; if (ratioW<ratioH) nextMinScale=ratioW; else nextMinScale=ratioH; nextImageView.transform = CGAffineTransformMakeScale(nextMinScale, nextMinScale); } nextImageView.center=CGPointMake(screenWidth*3/2, screenHeight/2); } [imageContainer addSubview: nextImageView]; } transition = NO; }
Partager