2

このプロセスは電子メールを送信しており、正常に動作しますが、フレームワークは電子メールの本文を NSArray にする必要があります。そこで、NSString を NSDictionary に変換して、ここで NSArray に含めるようにします。

NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:kSKPSMTPPartContentTypeKey,
    message,kSKPSMTPPartMessageKey,kSKPSMTPPartContentTransferEncodingKey, nil];

次に、ここでそれを実装します。

smtpTestMessage.parts = [NSArray arrayWithObject:plainPart];

全体として、ここに私のコードがあります:

NSLog(@"Start eMail");


SKPSMTPMessage *smtpTestMessage = [[SKPSMTPMessage alloc] init];
smtpTestMessage.fromEmail = @"***@gmail.com";
smtpTestMessage.toEmail = @"***@yahoo.com";
smtpTestMessage.relayHost = @"smtp.gmail.com";
smtpTestMessage.requiresAuth = YES;
smtpTestMessage.login = @"***@gmail.com";
smtpTestMessage.pass = @"***";
smtpTestMessage.subject = @"***";
smtpTestMessage.wantsSecure = YES;

smtpTestMessage.delegate = self;

NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:kSKPSMTPPartContentTypeKey,
    message,kSKPSMTPPartMessageKey,kSKPSMTPPartContentTransferEncodingKey, nil];


smtpTestMessage.parts = [NSArray arrayWithObject:plainPart];

[NSString stringWithFormat:@"%@",message];

[smtpTestMessage send];
NSLog(@"sent");

しかし悲しいことに、アプリを実行すると、電子メールは最後の段階に到達します...その後、アプリは終了して終了します

2013-10-15 00:43:50.512 BullyBox[3662:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
*** First throw call stack:
(0x2f61ae8b 0x399156c7 0x2f5540cb 0x2f556749 0xc77f3 0x31dd555f 0x31dd54fb 0x31dd54cb 0x31dc10f3 0x31dd4f13 0x31dd4bdd 0x31dcfc09 0x31da4f59 0x31da3747 0x2f5e5f27 0x2f5e53ef 0x2f5e3bdf 0x2f54e541 0x2f54e323 0x342852eb 0x31e051e5 0xc91b5 0x39e0eab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

編集

今、私はエラーを受け取り続けます:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendString:]: nil argument'

どんな助けでも大歓迎です!これも読んでくれてありがとう!xD <3

4

4 に答える 4

1

plainPartnil ではなく、正常に作成されていることを確認してください。

于 2013-10-15T05:14:01.657 に答える
1

判断するのは難しいですが、私が推測しなければならないのplainPartは作成されていないということです. なぜ私はこれを考えるのですか?エラーを見てみましょう。

[__NSPlaceholderArray initWithObjects:count:]:

これは、呼び出しの alloc/init シーケンスを指します。配列を割り当てている共有コード内の唯一の場所は次のとおりです。

smtpTestMessage.parts = [NSArray arrayWithObject:plainPart];

したがって、nil オブジェクトを使用して配列を作成しようとしているplainPart場合、場所 0 に nil オブジェクトを挿入しようとするとエラーが発生する理由は理にかなっています。

コード内のこの呼び出しにブレークポイントを設定してみてください。これにより、クラッシュが発生した場所を絞り込むことができます。

于 2013-10-15T05:16:50.927 に答える
0

あなたがここで何をしようとしているのかわからない

 NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:kSKPSMTPPartContentTypeKey,
message,kSKPSMTPPartMessageKey,kSKPSMTPPartContentTransferEncodingKey, nil];

ただし、命名規則に基づいて、キーを値の場所に保存しています。また、最新の Objective-C 構文に切り替えることもできます

 NSDictionary *plainPart =  @{
                                message: kSKPSMTPPartContentTypeKey,
 kSKPSMTPPartContentTransferEncodingKey: kSKPSMTPPartMessageKey
 };

これはあなたが書いたものと同等ですが、より読みやすくなっています。他の回答で述べたように、plainPart の作成に問題があるようです。うまくいけば、これを見てデバッグが容易になるはずです。

于 2013-10-15T05:24:09.883 に答える
0

最初にこの行を確認してくださいsmtpTestMessage.parts = [NSArray arrayWithObject:plainPart];。はいの場合はsmtpTestMessage割り当てられているかどうか、この中にデータが存在するかどうかを確認します

于 2013-10-15T06:09:36.063 に答える