【问题标题】:How do I synthesize Objective-C string?如何合成 Objective-C 字符串?
【发布时间】:2014-02-20 16:53:55
【问题描述】:

我正在尝试在 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 做了这个并且它有效。

【问题讨论】:

  • @property NSString *song, *track;
  • 鉴于您对 Objective-C 的了解很明显,我建议您花一些时间阅读一些好的 Objective-C 教程或一本好书。首先学习基础知识。以后会为你节省很多时间。

标签: objective-c


【解决方案1】:

你的代码有几个问题:

  • 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

【讨论】:

  • @matsoftware 你也不需要。 strongreadwriteatomic 是默认值。
【解决方案2】:

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

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

在你的标题中尝试

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

然后您可以使用

引用这些属性
self.song

或直接使用访问属性

_song

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

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

【讨论】:

    【解决方案3】:
    @property(nonatomic,strong) NSString *song;
    @property(nonatomic,strong) NSString *track;
    

    【讨论】:

    • NSString 属性(或任何具有可变/不可变类型的类)应该真正使用copy 而不是strong
    【解决方案4】:

    实施中:

    #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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多