次のように設定する必要があります。
Target = CompiledImage;
の必要はありません*
。どちらも基本的にポインターであるため、上記のコードを使用する場合、メモリアドレスを割り当て、内容をコピーしません。
ちなみに、変数名は小文字で始めてください。Target
通常、クラス名を表します。Apple コーディング規約に従って、それはtarget
.
あなたのコメントによると、次のことができます。
ViewController クラスで、 aUIImage
を として宣言します@property
。
@property (nonatomic, retain) UIImage *downloadedImage;
URL呼び出しをしている間、
NSImageLoader *imageLoader = [[NSImageLoader alloc] init];
[imageLoader setTarget:self];//setting current viewController as target instead of UIImage
画像をダウンロードすると、
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Finished Downloading Image: %@" ,[connection.originalRequest.URL absoluteString]);
UIImage *CompiledImage=[UIImage imageWithData:ImageData];
SEL selector=@selector(ImageDownloadingCompleted:Image:);
if([[self Delegate] respondsToSelector:selector]){
[[self Delegate] ImageDownloadingCompleted:self Image:CompiledImage];
}
else{
if(Target){
Target.downloadedImage = CompiledImage;//or [Target setDownloadedImage:CompiledImage];
}
}
// NSLog(@"Image Size:%i", [ImageData length]);
}
ViewController クラスで、同じ場所を指している同じメモリ アドレスをself.downloadedImage
持つイメージとしてアクセスできるようになりました。CompiledImage
別の方法は、クラスでUIImage *Target
asを宣言することです。メソッドの呼び出し中に、 を使用します。このメソッド内で、ターゲットを次のように設定する必要がありますUIImage **Target
NSImageLoader
setTarget
[imageLoader setTarget:&Target];
Target = Target;
更新:
コメントに基づいて、次のようになります。
for( NSDictionary *CurrentActivity in [Profile UserActivities]) {
...
UIImage *WineImage = [UIImage imageNamed:@"loader.gif"];
NSImageLoader *loader=[[NSImageLoader alloc] initWithURLString:[NSString stringWithFormat:@"%@%@",[TempSettings URL],[CurrentActivity objectForKey:@"ImageURL"]]];
[loader setTarget:&WineImage];
[loader startDownloading];
[self addSubview:Activity];
Counter++;
}
次に、NSImageLoader.h ファイル @interface で、
__strong UIImage **Target; //This should be strong not autoreleasing
NSImageLoader.m ファイルで、
- (void)setTarget:(UIImage *__strong *)iTarget{ //change here also
Target = target;
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Finished Downloading Image: %@" ,[connection.originalRequest.URL absoluteString]);
UIImage *CompiledImage=[UIImage imageWithData:ImageData];
SEL selector=@selector(ImageDownloadingCompleted:Image:);
if([[self Delegate] respondsToSelector:selector]){
[[self Delegate] ImageDownloadingCompleted:self Image:CompiledImage];
}
else{
if(Target){
*Target = CompiledImage;
}
}
// NSLog(@"Image Size:%i", [ImageData length]);
}
アップデート2:
UIImageView を渡すアプローチを使用すると、次のことができます。
for( NSDictionary *CurrentActivity in [Profile UserActivities]) {
...
UIImage *WineImage = [UIImage imageNamed:@"loader.gif"];
NSImageLoader *loader=[[NSImageLoader alloc] initWithURLString:[NSString stringWithFormat:@"%@%@",[TempSettings URL],[CurrentActivity objectForKey:@"ImageURL"]]];
[loader setTarget:Activity];//pass imageview and let the delegate method set image
[loader startDownloading];
[self addSubview:Activity];
Counter++;
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"Finished Downloading Image: %@" ,[connection.originalRequest.URL absoluteString]);
UIImage *CompiledImage=[UIImage imageWithData:ImageData];
SEL selector=@selector(ImageDownloadingCompleted:Image:);
if([[self Delegate] respondsToSelector:selector]){
[[self Delegate] ImageDownloadingCompleted:self Image:CompiledImage];
}
else{
if(Target){
Target.image = CompiledImage;
}
}
// NSLog(@"Image Size:%i", [ImageData length]);
}
ここで imageview を渡し、イメージをダウンロードしたらデリゲート メソッドでイメージを設定します。