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.
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? –
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