0

私は Objective C の初心者です。すでに にある画像を表示ViewControllerするために、 から に画像を渡したいと思っています。しかし、転送されたは転送後に値を示し、ボタンを押した後に に到達できません。私のコードは以下です、SecondClassSecondClassViewControllerimageviewnullsecondClass

myProtocol.h

@protocol myProtocol <NSObject>

-(UIImage *)transferImage;

@end

ViewController.h ファイル

#import "SecondClass.h"

@interface ViewController : UIViewController<myProtocol, UINavigationControllerDelegate>

{

   UIView *view;

}

@property (nonatomic,retain) UIImageView *imageView;

- (IBAction)sendImage:(id)sender;

@end

ViewController.m ファイル

#import "ViewController.h"

#import "SecondClass.h"

#import "myProtocol.h"

(void)viewDidLoad

{

    [super viewDidLoad];

     imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"photo1.png"]];

     [view addSubview:imageView];

    NSLog(@"I am in VC.m");

}

-(UIImage *)transferImage{

    NSLog(@"I am in transferImage");

    return imageView.image;

}

- (IBAction)sendImage:(id)sender {

    SecondClass *secClass = [[SecondClass alloc]init]; 

    secClass.delegate=self;

    [secClass callTransfer];

    NSLog(@"I am in sender");

    [self.navigationController pushViewController:secClass animated:YES];

}

@end

SecondClass.h

#import "myProtocol.h"

#import "ViewController.h"

@interface SecondClass : UIViewController<myProtocol,UINavigationControllerDelegate>

{
    UIView *secondView;

    IBOutlet UIImageView *myImage;

    id <myProtocol> myDelegate;

}

@property (nonatomic,retain) UIImageView *myImage;

@property(nonatomic,assign) id delegate;

-(void)callTransfer;

@end

SecondClass.m

#import "SecondClass.h"

#import "ViewController.h"

#import "myProtocol.h"

@implementation SecondClass

@synthesize delegate,myImage;

- (void)viewDidLoad

{
    [super viewDidLoad];

  [secondView addSubview:myImage];

}

-(void)callTransfer

{
    myImage.image=[delegate performSelector:@selector(transferImage)];

    myImage.image=[UIImage imageNamed:@"photo1.png"];

    NSLog(@"%@",myImage.image);

    NSLog(@"I am in call transfer");

}

@end
4

3 に答える 3

1

このコードを使用して確認してください

UIImage *img = [delegate performSelector:@selector(transferImage)]; 
NSLog(@"%@",img );
NSLog(@"I am in call transfer");
于 2012-08-13T09:09:56.633 に答える
0

ここではデリゲートは必要ありません。新しいViewControllerにデータを渡すという単純なタスクが非常に複雑になっています。

SecondClass *secClass = [[SecondClass alloc] init]; 

secClass.myImage.image = imageView.image;

[self.navigationController pushViewController:secClass animated:YES];

アップデート

これは練習用だとおっしゃいましたが、それでも根本的に間違っています。デリゲートのより一般的なケースは、親が子を所有し、複雑なプロトコルを設定せずにメソッドを呼び出すことができるため、からchild -> parentではなくから画像を送信することです。parent -> child

#import "ChildVC.h"

@interface ParentVC : UIViewController <ChildDelegate>

@end

@implementation ParentVC

- (void)pushViewController;
{
    ChildVC *childVC = [[ChildVC alloc] init];
    childVC.delegate = self;
    [self.navigationController pushViewController:childVC animated:YES];
}

- (void)childViewController:(ChildVC *)childViewController didFinishWithImage:(UIImage *)image;
{
    // do something with the image passed back
}

@end

すると子供は次のようになります

@class ChildVC;

@protocol ChildDelegate <NSObject>

- (void)childViewController:(ChildVC *)childViewController didFinishWithImage:(UIImage *)image;

@end

@interface ChildVC : UIViewController

@property (nonatomic, weak) id<ChildDelegate> delegate;
@property (nonatomic, strong) UIImage *image;

@end

@implementation ChildVC

- (void)whenSomethingInterestingHappens;
{
    if ([self.delegate respondsToSelector:@selector(childViewController:didFinishWithImage:)]) {
        [self.delegate childViewController:self didFinishWithImage:self.image];
    }
    [self.navigationController popViewControllerAnimated:YES];
}

@end
于 2012-08-13T09:27:56.747 に答える