2

我是菜鸟,这是我在这里的第一篇文章。我试图从 URL 加载图像并将其分配给一些 NSMutableArray 或 UIImage 变量,但它失败了。我知道 AFNetworking 中的异步事情已经讨论了很多,但我仍然遗漏了一些东西。这是我的示例代码

-(void)sampleCode{
NSURL *theUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost/images/054.jpg"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theUrl];
AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request
  imageProcessingBlock:nil
   success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
       //this code success
       NSLog([NSString stringWithFormat:@"--%@--", image]);
       UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)];
       imgV.image=image;
       [self.view addSubview:imgV];
       //End code success. Nslog and image appear

       //this code fail
       [self.someArray addObject:image];
       [self.someArray addObject:@"xx"];
       self.someImage = image;
       NSLog([NSString stringWithFormat:@"%@ --",self.someArray]);
       //end code fail. self.someArray and self.someImage null.
   }
   failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
   }];
[operation start];

代码可以在成功块中使用图像。但我仍然需要处理图像,所以我需要将它分配给全局变量(如果是 NSMutableArray *someArray 或 UIImage *someImage)。

我的问题是:如果我可以在成功块中使用它,这意味着图像已到达,但为什么它不能分配给全局变量?

当我使用 UITableViewControler 时,我可以使用 self.tableView reloadData。当我不使用 tableView 时,如何“重新加载数据”?

- 编辑 -

- (void)viewDidLoad
{
[super viewDidLoad];
self.someArray = [[NSMutableArray alloc]init];

[self sampleCode];
NSLog([NSString stringWithFormat:@"Array - %@",self.someArray]);
// its still empty
}

我可以这样用吗?它仍然是空的

谢谢

4

4 回答 4

1

原因array不是allocated

在方法中使用这些行viewDidLoad:进行分配并准备好在课堂上的任何地方使用

self.someArray = [[NSMutableArray alloc]init];

编辑Reloading取决于data你的requirement. 例如说你有UIImageView *imgView

imgView.image = [UIImage imageNamed:@"someImage"];

现在successfully得到upadated后将是:

imgView.image = someImageDownloaded using AFImageRequestOperation
于 2013-05-01T11:48:42.393 回答
0

首先,您的 self.someArray 是否已初始化?

如果没有 UITableView,您reloadData可以调用将在成功块中加载数据的方法和在失败块中处理错误的方法(例如向用户显示消息或根据给定错误更改数据处理)。

通常,如果调用成功块,则表示操作成功,并且在您的情况下表示对图像的请求成功,但这并不总是意味着已收到图像,服务器可能会返回成功消息但没有图像,在这种情况下,图像将为 nil,但将调用成功块。

于 2013-05-01T11:45:47.597 回答
0

如果您不使用表格视图,那么您必须在从 url 获取数据后创建自己的方法来设置数据。

于 2013-05-01T13:06:22.520 回答
0

你做得很好,但我认为王子说你忘记分配你的数组self.someArray

self.someArray = [[NSMutableArray alloc]init];//in ViewDidLoadMethod


NSURL *theUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://images.mathrubhumi.com/english_images/2012/Dec/06/03082_185786.jpg"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theUrl];
AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil
                                      success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                                      UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)];
                                      imgV.image = image;
                                      [self.view addSubview:imgV];

                                      [self.someArray addObject:image];
                                      [self.someArray addObject:@"xx"];
                                      NSLog(@"arr--%@",self.someArray);
                                      imageView.image = image;// here imageView is globalVariable

                                      }
                                     failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                                     }];
[operation start];

这是给出self.someArray的值,而 imageView 正在显示它的图像。

于 2013-05-01T12:40:53.913 回答