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