0

私の目的は、Files というカスタム クラスのオブジェクトのテキストをラベルに表示することです。Files.h は次のとおりです。

#import <Foundation/Foundation.h>

@interface Files : NSObject
    @property (nonatomic, retain) NSString *title;
    @property (nonatomic, retain) NSString *text;

@end

これは Files.m です:

#import "Files.h"

@implementation Files

@dynamic title;
@dynamic text;
@end

これが私のアプリの .h ファイルです。ラベルは trackName と呼ばれます:

#import <UIKit/UIKit.h>
#import "Files.h"


@interface FirstViewController : UIViewController

{
    Files *plainpalais;
}
@property (weak, nonatomic) IBOutlet UILabel *trackName;


-(Files*) chooseFile;


@end

これはアプリの .m ファイルです。

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController
@synthesize trackName;

-(Files*)chooseFile
{
    return plainpalais;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    plainpalais.text=@"hello";
    plainpalais.title=@"plainpalais";
    trackName.text=plainpalais.title;


    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setTrackName:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:        (UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}


@end

問題は、ラベル trackName に plainpalais が表示されないことです...

手伝ってくれてありがとう !

PS: 私は初心者なので、これはおそらく基本的な間違いです。

4

1 に答える 1

1

後でこれらのプロパティに getter/setter を提供することをコンパイラに伝える実装で、つまり Objective-C ランタイムを使用しています@dynamicFiles.m

@synthesizeではなく使用したいと思います@dynamic。例えば、

#import "Files.h"

@implementation Files

@synthesize title;
@synthesize text;

@end

また、提供されたコードで実際にFilesオブジェクトを作成していません。メソッドはオブジェクトchooseFileを返しているように見えnilます (他の場所で初期化していないと仮定しますplainpalais)。plainpalaisおそらく、initメソッドで初期化する必要があります。

- (id)init {
    self = [super init];
    if (self) {
        plainpalias = [[Files alloc] init];
    }
    return self;
}

releaseこのオブジェクトを忘れないでくださいdealloc(ARC を使用していない場合)。

于 2012-09-02T15:33:30.080 に答える