Я знаю, что общие вопросы не разрешены на этом сайте - но у меня есть проблема, которая на самом деле не связана с моим кодом. Это одна из тех компьютерных проблем, когда мой код работал минуту, а не работал дальше - и я ничего не менял. Я собираюсь опубликовать то, что, по моему мнению, является соответствующим кодом, но я не получаю никаких сообщений об ошибках, либо в моей консоли отладки в XCode
либо на стороне сервера в журналах ошибок apache2
.
Возможно соответствующий код:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImageWriteToSavedPhotosAlbum(info[UIImagePickerControllerOriginalImage], nil, nil, nil);
NSString * uploadURL = @"http://192.168.1.4/upload.php";
NSLog(@"uploadImageURL: %@", uploadURL);
NSData *imageData = UIImageJPEGRepresentation(info[UIImagePickerControllerOriginalImage], 0.5);
NSString *queryStringss = [NSString stringWithFormat:@"%@",uploadURL];
queryStringss = [queryStringss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//manager.responseSerializer.acceptableContentTypes = nil;
manager.responseSerializer=[AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/plain"];
NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameEncoded = [[userdefaults objectForKey:@"pfuser"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSDictionary *params = @{@"username": usernameEncoded, @"count": [userdefaults valueForKey:@"count"]};
[manager POST:queryStringss parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:@"file.jpeg" mimeType:@"image/jpeg"];
}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
NSInteger count = [userdefaults integerForKey:@"count"];
NSNumber *stored = [[NSNumber alloc] initWithInt:count];
count++;
[userdefaults setInteger:count forKey:@"count"];
GMSMarker *marker3 = [[GMSMarker alloc] init];
marker3.position = mapView_.myLocation.coordinate;
marker3.title = [userdefaults objectForKey:@"pfuser"];
marker3.map = mapView_;
PFGeoPoint *point = [PFGeoPoint geoPointWithLatitude:mapView_.myLocation.coordinate.latitude longitude:mapView_.myLocation.coordinate.longitude];
PFObject *pointstore = [PFObject objectWithClassName:@"MapPoints"];
pointstore[@"title"] = [userdefaults objectForKey:@"pfuser"];
pointstore[@"location"] = point;
pointstore[@"count"] = stored;
[pointstore saveEventually:^(BOOL succeeded, NSError *error) {
if (error) {
NSLog(@"Error");
}
else {
dispatch_async(dispatch_get_main_queue(), ^(void){
mapView_.settings.myLocationButton = YES;
});
}
}];
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@ ***** %@", operation.responseString, error);
}];
[picker dismissViewControllerAnimated:YES completion:NULL];
}
Выше - это код, который должен выполняться. Кажется, что все это до тех пор, пока [manager POST:queryStringss parameters:params...
Я не вижу сообщений о успехе или неудаче NSLog
, он просто бросается в глаза... приложение не разбивается, хотя... приложение продолжает работать нормально.
Любая помощь будет высоко оценена сегодня утром (я бы хотел работать с ней с кем-то, кто знает, что они делают, в чате или что-то в этом роде). Заранее спасибо!
ОБНОВИТЬ
Код на стороне сервера PHP:
<?php
header("Content-Type: application/json");
$username = $_POST['username'];
$count = $_POST['count'];
$base64string = base64_encode(file_get_contents("images/".$username."/".$count."/".$username."file".$count.".jpeg"));
echo json_encode(array("image" => $base64string));
?>
ОБНОВИТЬ
Вот где я сейчас объявляю manager
:
#import "ViewController.h"
#import "SignUpController.h"
#import <Parse/Parse.h>
#import "AFHTTPRequestOperation.h"
#import "AFHTTPRequestOperationManager.h"
@import GoogleMaps;
typedef void (^CompletionHandlerType)();
@interface ViewController ()
@end
@implementation ViewController {
GMSMapView *mapView_;
BOOL firstLocationUpdate_;
CLLocationManager *locationManager;
UIImageView *image;
UIButton *respondButton;
AFHTTPRequestOperationManager *manager;
}
...
ОБНОВИТЬ
После некоторой замечательной помощи TheEye - мы выяснили, с почтальоном (chrome extension), что по какой-то причине приложение просто не находит страницу... и я получаю ответ 404 (от почтальона). Я до сих пор не понял, почему это происходит, больше помощи будет очень благодарна... но я не могу сразу ответить, поскольку я устал.
Глупый брандмауэр должен был случайно заблокировать материал. Я отключил брандмауэр, и все снова заработало.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:nil];
UIImage *fetchedImage = (UIImage*) [info objectForKey:UIImagePickerControllerOriginalImage];
NSData *imageData = UIImageJPEGRepresentation(fetchedImage,0.0);
[self SetUserProfilePhotoData:imageData];
}
-(void)SetUserProfilePhotoData:(NSData*)imageData
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer.timeoutInterval = 15000000000000;
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
// [serializer setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;
NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
NSString *usernameEncoded = [[userdefaults objectForKey:@"pfuser"]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSDictionary *params = @{@"username": usernameEncoded, @"count": [userdefaults valueForKey:@"count"]};
NSMutableURLRequest *request =
[serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://192.168.1.4/upload.php" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// [formData appendPartWithFormData:imageData name:@"image"];
[formData appendPartWithFileData:imageData name:@"image" fileName:"file.jpeg" mimeType:@"application/octet-stream"];
} error:nil];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD showSuccessWithStatus:@"Uploaded!"];
}); NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Success %@", string);
[[NSUserDefaults standardUserDefaults] setValue:@"" forKey:@"UserProfilePic"];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[SVProgressHUD showErrorWithStatus:@"Error in uploading!"];
NSLog(@"Failure %@", error.description);
}];
[operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,
long long totalBytesWritten,
long long totalBytesExpectedToWrite) {
// NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite);
float progress = (float)totalBytesWritten/(float)totalBytesExpectedToWrite;
[SVProgressHUD showProgress:progress status:[NSString stringWithFormat:@"Uploading %@%%",[NSString stringWithFormat:@"%.0f", progress*100]] maskType:SVProgressHUDMaskTypeClear];
}];
// 5. Begin!
[operation start];
}