Xcode 添加messageUI.framework后,应用程序停止工作 添加messageUI.framework后,应用程序停止工作
我已经创建了一个完全工作的应用程序,我想添加一些新功能。我添加了Xcode 添加messageUI.framework后,应用程序停止工作 添加messageUI.framework后,应用程序停止工作,xcode,messageui,initwithcoder,Xcode,Messageui,Initwithcoder,我已经创建了一个完全工作的应用程序,我想添加一些新功能。我添加了messageUI.framework,它停止了工作。如果我删除框架,它会再次工作,但这不是我的想法 我收到的错误是: -[Account initWithCoder:]:发送到实例0x1cd953a0的选择器无法识别 我有一个名为Account的自定义NSObject,加载时出错: myAccounts = [[NSMutableArray alloc] init]; myAccounts = [NSKeyedUnarchiver
messageUI.framework
,它停止了工作。如果我删除框架,它会再次工作,但这不是我的想法
我收到的错误是:
-[Account initWithCoder:]:发送到实例0x1cd953a0的选择器无法识别
我有一个名为Account的自定义NSObject
,加载时出错:
myAccounts = [[NSMutableArray alloc] init];
myAccounts = [NSKeyedUnarchiver unarchiveObjectWithFile:savePath]; //Crashes in this line
以前使用以下工具保存时:
[NSKeyedArchiver archiveRootObject:myAccounts toFile:savePath];
它可能是由一些重叠的变量或类似的东西引起的吗
笔记:
Account.h
类似于:
#define kAccName @"name"
#define kAccID @"identifier"
#define kAccInitAmount @"initAmount"
#define kAccActive @"active"
#import <Foundation/Foundation.h>
#import "Transfer.h"
@interface Account : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *identifier;
@property (nonatomic) double initAmount;
@property (nonatomic) BOOL active;
- (id)initWithID:(NSString *)ident;
@end
我刚刚碰到了这个问题,我不能告诉你确切的原因,但是把你的Account对象重构成任何其他名称,我使用了Accounts,它就工作了。MessageUI.framework在运行时与您的帐户对象名称发生冲突。这就是Apple要求我们使用前缀约定的原因之一:
#import "Account.h"
@implementation Account
@synthesize name;
@synthesize identifier;
@synthesize initAmount;
@synthesize active;
- (id)init {
self = [super init];
if (self) {
self.active = TRUE;
}
return self;
}
- (id)initWithID:(NSString *)ident {
self = [super init];
if (self) {
self.active = TRUE;
self.identifier = ident;
}
return self;
}
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.name = [decoder decodeObjectForKey:kAccName];
self.identifier = [decoder decodeObjectForKey:kAccID];
self.initAmount = [decoder decodeDoubleForKey:kAccInitAmount];
self.active = [decoder decodeBoolForKey:kAccActive];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.name forKey:kAccName];
[encoder encodeObject:self.identifier forKey:kAccID];
[encoder encodeDouble:self.initAmount forKey:kAccInitAmount];
[encoder encodeBool:self.active forKey:kAccActive];
}
@end