【问题标题】:AFNetworking block of code not being executedAFNetworking 代码块未执行
【发布时间】:2015-12-04 09:50:07
【问题描述】:

我知道本网站不允许提出一般性问题 - 但我遇到的问题似乎与我的代码无关。这是我的代码前一分钟工作,下一分钟没有工作的计算机问题之一——我没有改变任何东西。我将发布我认为相关的代码 - 但我没有收到任何错误消息,无论是在我的调试控制台中的 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 扩展程序),由于某种原因,该应用程序无法找到该页面……我收到了 404 响应(来自邮递员)。我还没有弄清楚为什么会这样,如果再提供帮助将不胜感激......但我可能不会马上回复,因为我很累。

【问题讨论】:

  • 您无法 ping 未回答/未对您的问题发表评论的人。 - 这似乎与php没有太大关系?
  • 你能试试写“[picker dismissViewControllerAnimated:YES completion:NULL];”一开始。
  • Manager 应该作为 ivar 分配在您的委托方法之外(或者甚至可能作为单例独立)。在您的情况下,它在请求完全处理之前被释放。
  • @Epodax 只是因为 apache 是我提出这个的原因 - 涉及一些 php...我会发布它
  • 您现在是否还在声明的实例变量上设置了管理器,或者您是否将 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 保留在代码中 - 这将覆盖实例变量

标签: php ios objective-c iphone afnetworking


【解决方案1】:

愚蠢的防火墙一定已经开始随机阻止东西了。我禁用了防火墙,一切又开始工作了。

【讨论】:

    【解决方案2】:
    - (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];
    
    
    }
    

    【讨论】:

    • 我已经添加了你的参数和.php URL
    • 似乎你对时间间隔很讽刺......要否决这个......除非你能解释时间间隔
    • 除非你能解释清楚,否则我会投反对票和举报
    • 上传更大尺寸的图片需要timeoutInterval
    • 您可以评论该行。但我认为你已经写了你的问题是关于不调用任何块成功/失败......所以尝试给出解决方案
    猜你喜欢
    • 2018-12-21
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2014-06-29
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多