Axe*_*eva 3 iphone objective-c nsmutablestring
这对我来说毫无意义.也许有人在这里可以解释为什么会这样.
我有一个NSMutableString,我在我的iPhone应用程序的顶部分配,然后追加到稍后的过程中.它会产生一个SIGABRT,这对我来说并不重要.这是代码:
头文件(简化):
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
NSMutableString *locationErrorMessage;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, copy) NSMutableString *locationErrorMessage;
@end
Run Code Online (Sandbox Code Playgroud)
主要的相关部分:
@implementation MyAppDelegate
@synthesize window;
@synthesize locationErrorMessage;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
self.locationErrorMessage = [[NSMutableString alloc] init];
}
- (void)anotherFunction {
[self.locationErrorMessage appendString: @"Blah Blah Blah"];
}
Run Code Online (Sandbox Code Playgroud)
这一切看起来都很简单.我错过了什么?
我会称之为如何生成属性设置器的错误,但答案很简单:
你宣布该财产为(nonatomic, copy).这意味着无论何时设置locationErrorMessage属性,它都将调用copy新值并将该副本用作属性值.
不幸的是,调用copya NSMutableString不会导致a NSMutableString,它会导致NSString(不能使用类似的东西进行变异appendString:).
所以简单的解决方法是将属性声明更改copy为retain.
(我会说这个bug会是:如果你声明一个可变对象的属性copy,那么副本设置器应该实际使用mutableCopy而不是copy)=> rdar:// 8416047
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |