gpt4 book ai didi

iphone - NSMutableString appendString 生成一个 SIGABRT

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:02 26 4
gpt4 key购买 nike

这对我来说毫无意义。也许这里有人可以解释为什么会这样。

我有一个 NSMutableString,我在我的 iPhone 应用程序的顶部分配,然后附加到该过程的后面。它会产生一个 SIGABRT,这对我来说不合算。这是代码:

头文件(简化):

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
NSMutableString *locationErrorMessage;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, copy) NSMutableString *locationErrorMessage;

@end

以及Main的相关部分:

@implementation MyAppDelegate

@synthesize window;
@synthesize locationErrorMessage;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
self.locationErrorMessage = [[NSMutableString alloc] init];
}

- (void)anotherFunction {
[self.locationErrorMessage appendString: @"Blah Blah Blah"];
}

这一切看起来很简单。我错过了什么?

最佳答案

我将其称为属性 setter 生成方式的错误,但答案非常简单:

您将该属性声明为 (nonatomic, copy)。这意味着无论何时设置 locationErrorMessage 属性,它都会对新值调用 copy 并将该副本用作属性值。

不幸的是,在 NSMutableString 上调用 copy 不会产生 NSMutableString,它会产生 NSString (不能使用 appendString: 之类的东西改变)。

因此,简单的解决方法是将属性声明从 copy 更改为 retain

(我会说错误是:如果您将可变对象的属性声明为 copy,那么复制 setter 实际上应该使用 mutableCopy 而不是 复制) => rdar://8416047

关于iphone - NSMutableString appendString 生成一个 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com