0

L'application que je crée télécharge des images dans quatre (la quatrième est une fonction de test) façons;UIImageWriteToSavedPhotosAlbum images crash mon application lorsque je télécharge sur le serveur

1.Directly de UIImagePickerController avec UIImagePickerControllerSourceTypeCamera comme ceci:

//didFinishPickingImage method 
if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) 
{ 
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
} 

CGRect myImageRect = CGRectMake(30.0f, 190.0f, 250.0f, 210.0f); 
myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 
//released in dealloc because I reuse it alot 

myImage.image = img; 
[self.view addSubview:myImage]; 

picking 2.Directly bibliothèque photo à l'aide aussi

myImage.image = img; 

3.Utilisation de l'image enregistrée de 1.

pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/"; 
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName]; 
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath]; 

UIImage *img = [UIImage imageWithContentsOfFile:ImagePath]; 

myImage.image = img; 

4.En tant que fonction de test: Utilisation d'une image prise avec l'iPhone defa application caméra ult (même que UIImagePickerController) mais en utilisant ImagePath au lieu de UIImagepickerController, UIImagePickerControllerSourceTypePhotoLibrary.

//Same as Number 3. 
pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/"; 
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName]; 
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath]; 

UIImage *img = [UIImage imageWithContentsOfFile:ImagePath]; 

myImage.image = img; 

* Jusqu'à ici, l'utilisateur peut voir le fichier dans l'une des quatre façons sur l'écran ajouté à myImage instance de UIImageView (En fonction de la sélection de l'utilisateur). Cela prouve que je sélectionne les bons fichiers (pour trois et quatre).

//uploading function 

NSData *imageData = UIImageJPEGRepresentation(myImage.image, 1.0); 


NSMutableURLRequest *request2 = [[[NSMutableURLRequest alloc] init] autorelease]; 
      [request2 setURL:[NSURL URLWithString:urlString]]; 
      [request2 setHTTPMethod:@"POST"]; 

NSMutableData *body = [NSMutableData data]; 
//... append boundary, content-disposition code etc here. 
[body appendData:[NSData dataWithData:imageData]]; 
[request setHTTPBody:body]; 

Le problème est que, lors du téléchargement, les numéros 1, 2 et 4 fonctionnent, le NUMÉRO 3 NE L'EST PAS.

Sortie de console; Programme reçu le signal: "EXC_BAD_ACCESS"

Je suis conscient que cette sortie provient d'une tentative d'accès à partir d'objets libérés, et j'ai rencontré et résolu ce problème dans d'autres situations. Mais pas encore trouvé ici, même après avoir contre-vérifié mes allocations de mémoire.

Je voudrais vraiment apprécier les moyens de résoudre ce problème.

+0

comment vous trouver les ImageFileName dans # 3? êtes-vous en train de vérifier si vous obtenez une image valide? Est-ce que imageData est valide, et dit-il un nombre raisonnable d'octets si vous l'inspectez dans le débogueur? –

+0

J'obtiens imageFileName en traversant le tableau . . . NSArray * directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: ImagePath]; Oui. Il s'agit d'une image valide dont 5763072 octets lui ont été affectés par la méthode create_image (CGImage *, ...) – erastusnjuki

Répondre

0

iPhone OS avait créé un autre dossier "/ private/var/mobile/Media/DCIM/101APPLE /" différent du 100APPLE par défaut.

Je me suis rendu compte qu'en fait parfois les photos sont également enregistrées dans un dossier 999APPLE, 102APPLE etc. Cela dépend de la façon dont vous supprimez, copiez et créez des photos dans le rouleau de caméra.

Ainsi, les images de votre pellicule peuvent être stockées dans de nombreux dossiers différents.

Par conséquent, ne pas être en mesure d'exécuter [NSData dataWithContentsOfFile:ImagePath];, il émet une exception:

"EXC_BAD_ACCESS"

Questions connexes