-1

こんにちは皆さん、私は目的の c を初めて使用し、別のUIViewControllerクラスからオブジェクトのプロパティを初期化するための c++ または Java のような方法を探していました。

-init 関数を使用しましたが、問題は、いくつかのデバッグを行った後、開始時にプロパティ (an NSString) が正常に初期化されていても、init で行ったすべてを削除 (初期化) することがわかったことです。だから私は私の!動画リンクを再生したいのですが、メソッドに渡される文字列が null であることがわかりました。また、ビデオ内のストリームを初期化するとすぐに再生されることにも注意してください。-initviewDidLoadpropertyplayTheVideoviewDidLoad

これが私のコードです:

ButtonsController.m

#import "ButtonsController.h"
#import "PlayVideoController.h"

@interface ButtonsController ()

@end

@implementation ButtonsController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    **UPDATE:[self createButton];**
}

-(void)createButton {

PlayVideoController *newObject = [[PlayVideoController alloc] initWithString:@"--somestring--" ];
[newObject playTheVideo];

}

PlayVideoController.m

#import "PlayVideoController.h"

@interface PlayVideoController ()

@end

@implementation PlayVideoController

@synthesize stream;
@synthesize player;


- (void)viewDidLoad
{
    [super viewDidLoad];

    [self playTheVideo];
}


- (id) initWithString: (NSString*) theStream {
    self = [super init];
    if (self) {
        stream = theStream;
    }
    return self;
}

- (void) playTheVideo {

    NSURL *url = [NSURL URLWithString:stream];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [player loadRequest:request];
}

PlayVideoController.h

#import <UIKit/UIKit.h>

@interface PlayVideoController : UIViewController

@property NSString *stream;

@property (weak, nonatomic) IBOutlet UIWebView *player;
- (void) playTheVideo;
- (id) initWithString: (NSString*) theStream;

@end

すぐに開始するためだけにメインクラスにオブジェクトを作成します

編集: main.m のアクションを削除し、デフォルトのままにしました

4

3 に答える 3

1

プロパティでは、メモリ管理の属性と、アトミックか非アトミックかを指定する必要があります。

だから代わりに @property NSString *stream;

あなたは書くべきです

@property (copy, nonatomic) NSString *stream;

@synthesize面倒を見てくれるので、もう書く必要はありません。

最後に、イニシャライザで、アンダースコアを使用して iVar に直接アクセスする必要があります。

だからそれは言うべきです_stream = [theStream copy];

編集:

ゲッターを次のように変更しますself.stream

于 2013-11-12T19:28:15.267 に答える