如何合成Objective-C字符串?

时间:2014-02-20 16:53:56

标签: objective-c

我正在尝试在Objective C中合成两个字符串,以便自动创建setter / getter。

在我的实施中:

#import "Song.h"

@implementation Song

@synthesize song, track;

@end

在我的界面中:

#import <Foundation/Foundation.h>

@interface Song : NSObject

@property string song, track;

@end

我在界面文件中收到的错误是“未知的类型名称字符串”。

我在实现文件中遇到的错误是“预期@synthesize中的属性名称”。

我不确定该怎么办,因为我为int做了这个并且它有效。

4 个答案:

答案 0 :(得分:5)

您的代码中存在几个问题:

  • Cocoa没有名为string的类型,您需要使用NSString
  • As of Xcode 4.4您无需使用@synthesize

以下是:

@interface Song : NSObject
// Below I am using copy to avoid referencing potentially mutable strings.
// You may or may not want to use this approach.
@property (nonatomic, copy) NSString *song;
@property (nonatomic, copy) NSString *track;

@end

答案 1 :(得分:3)

在XCode 4.4及更高版本中自动完成合成。

但是,您的实际问题是字符串属性的声明。

在标题中

尝试

@property (strong, nonatomic) NSString *song;
@property (strong, nonatomic) NSString *track;

然后,您可以使用

引用这些属性
self.song

或使用

直接访问该媒体资源
_song

请注意,除非您在setter或getter中访问属性的实例,否则不建议使用第二种方法

它适用于int的原因是因为int是一个原语(而objective-c是C的超集)。在Objective-C中,NSStringNSObject,你必须对它有一个强或弱的引用(你必须指向它)。您可以阅读Apple的reference on encapsulating data以获取有关属性的更多信息。

答案 2 :(得分:0)

@property(nonatomic,strong) NSString *song;
@property(nonatomic,strong) NSString *track;

答案 3 :(得分:0)

在实施中:

#import "Song.h"

@implementation Song

@synthesize song, track;

@end

在界面中:

#import <Foundation/Foundation.h>

@interface Song : NSObject

@property (nonatomic, strong)NSString *song;
@property (nonatomic, strong)NSString *track;

@end