0

我是 Xcode 的新手,并试图了解更多关于在 xcode 中编码的信息。

因此,我正在尝试了解有关目标 C 上的模型(模型操作)的更多信息。

我对 PhotoViewController.h 和 .m 文件中的 @Class 声明感到困惑

正如您在下面看到的,我已经在 appdelegate.m 和 PhotoViewController.m 文件中导入了 Photo.h

我教程的目标是 PhotoViewController.m 文件可以识别 self.photo.filename

但是,为什么必须在 PhotoViewController.h 文件中添加 @Class 和 @property 呢?

#import 命令不是已经足够了吗?@Class 是什么意思,为什么它也必须包含 @property?

注意:我试图在 @class 上发表评论 (//),但 xcode 告诉我找不到照片属性,以及当我在属性上添加评论 (//) 时

PhotoViewController.m 文件也弄乱了无法识别的照片属性。

不太明白,@class和#import同时使用,加上声明@property photo

这是Photo.m

#import "Photo.h"

@implementation Photo

-(id)init
{
    self = [super init];
    return self;
}

@end

照片.h

#import <Foundation/Foundation.h>

@interface Photo : NSObject
@property (weak, atomic) NSString *title;
@property (strong, nonatomic) NSString *detail;
@property (strong, nonatomic) NSString *filename;
@property (strong, nonatomic) NSString *thumbnail;
@end

Appdelegate.m

#import "AppDelegate.h"
#import "FeedTableViewController.h"
#import "ProfileViewController.h"
#import "FavoritesViewController.h"
#import "Photo.h"


@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    Photo *photo= [[Photo alloc]init];
    photo.title = @"Demo Photo";
    photo.detail = @"This is a demo photo";
    photo.filename = @"demo.png";
    photo.thumbnail = @"demo-thumb.png";


    return YES;
}
@end

PhotoViewController.h 文件

#import <UIKit/UIKit.h>
@class Photo;
@interface PhotoViewController : UIViewController

@property (weak, nonatomic) NSString *imageFileName;
@property (weak, nonatomic) NSString *imageTitle;
@property (strong, nonatomic) Photo *photo;
@end

PhotoViewController.m 文件

#import "PhotoViewController.h"
#import "UIImageView+AFNetworking.h"
#import "Photo.h"

@implementation PhotoViewController

-(void)viewDidLoad {
//    self.title = self.imageTitle;
    UIImageView *imageView = [[UIImageView alloc] init];

    [imageView setImageWithURL:[UIImage imageNamed:self.photo.filename]];
    imageView.frame = CGRectMake(10,10,300,300);

    [self.view addSubview:imageView];

    UILabel *imageTitleLabel = [[UILabel alloc] init];
    imageTitleLabel.text = self.imageTitle;
    imageTitleLabel.frame = CGRectMake(11,320,300,40);

    [self.view addSubview:imageTitleLabel];
}

@end
4

2 回答 2

1

@class Photo定义类的存在PhotoPhotoViewController.h允许您声明照片属性。Photo 属性稍后用于PhotoViewController.m访问实例变量 photo 像这样self.photo[self photo]

你可以把#import "Photo.h"你的PhotoViewController.h,但这样更干净:)

于 2013-10-04T07:49:33.053 回答
0

@财产

它是用来替换getter方法的,当你想要获取值时,你必须将该变量声明为属性,这样就不需要单独编写getter方法,

你也应该在 Photo.m 中实现@synthesize,@synthesize 将作为 setter 方法工作。

于 2013-10-04T07:50:59.490 回答