gpt4 book ai didi

cocoa - EXEC_BAD_ACCESS(代码=1,地址=0x10)

转载 作者:行者123 更新时间:2023-12-03 17:55:03 25 4
gpt4 key购买 nike

在我的 OS X 应用程序中,我尝试保存和检索单选按钮的标签。错误发生在 setPreferenceRotor 中标记为“<-HERE”的行上。有一个有效的标签传入。

//  PreferenceController.h
extern NSString * const myCellKey;
extern NSString * const myMatrixChangedNotification;

@interface PreferenceController:NSWindowController
{
IBOutlet NSMatrix *matrixRotor;
}
- (IBAction)setRotorTag:(id)sender;
+ (NSInteger)preferenceRotorTag;
+ (void)setPreferenceRotor:(NSInteger)matrixTag;
@end

// PreferenceController.m
NSString * const myMatrixChangedNotification = @"myRotorChanged";
@implementation PreferenceController
- (void)windowDidLoad
{
[super windowDidLoad];
[matrixRotor selectCellWithTag:[PreferenceController preferenceRotorTag]];
}
+ (NSInteger)preferenceRotorTag
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *tagAsData = [defaults objectForKey:myCellKey];
return [NSKeyedUnarchiver unarchiveObjectWithData:tagAsData];
}
+ (void)setPreferenceRotor:(NSInteger)matrixTag
{
//NSInteger mt = matrixTag;
NSData *tagAsData = [NSKeyedArchiver archivedDataWithRootObject:matrixTag]; **//<-HERE**
[[NSUserDefaults standardUserDefaults]setObject:tagAsData forKey:myCellKey];
}

最佳答案

您正在将一个 NSInteger 类型的原始(非对象)值从变量 matrixTag 传递到一个方法 archivedDataWithRootObject:,它需要一个对象引用值。该方法愉快地尝试使用该值(可能是整数 16,0x10)作为对象引用,然后 kaboom...

您的想法看起来是正确的,您知道您不能在用户默认值中存储非对象值,因此您必须首先将它们包装为对象。这只是你的做法是错误的。这里您需要的是从您的整数创建一个 NSNumber 实例。你可以这样写:

NSNumber *tagAsNumber = [NSNumber numberWithInteger:matrixTag];
[[NSUserDefaults standardUserDefaults] setObject:tagAsNumber forKey:myCellKey];

但是这种模式很常见,因此提供了快捷方式:

[[NSUserDefaults standardUserDefaults] setInteger:matrixTag forKey:myCellKey];

这将为您创建 NSNumber 对象。还有一个相应的 integerForKey: 方法,它会在读取时为您解开整数。

关于cocoa - EXEC_BAD_ACCESS(代码=1,地址=0x10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993169/

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