5

aをに変換(またはコピー?)しようとしNSMutableArrayていNSStringます。私の問題は、の構造を本当に理解していないことだと思いますNSString。変換後、メール本文に添付したいと思います。これが私のコードです:

- (IBAction)sendEmail
{
    NSLog(@"sendEmail");
    [textView resignFirstResponder];
    [textView1 resignFirstResponder];
    if ([MFMailComposeViewController canSendMail])
    {
        // set the sendTo address
        NSMutableArray *recipients = [[NSMutableArray alloc] initWithCapacity:1];
        [recipients addObject:@"example@yahoo.com"];
        MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
        controller.mailComposeDelegate = self;
        [controller setSubject:@"Iphone Game"];
        NSString *string = [string appendString:[NSString stringWithFormat:"%@", [viewArray objectAtIndex:i]]];
        [controller setMessageBody:string isHTML:NO];
        [controller setToRecipients:recipients];
        [self presentModalViewController:controller animated:YES];
        [controller release];
    }
    else 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
 message:@"Your device is not set up for email." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
        [alert release];
    }
}
4

3 に答える 3

9

編集:

コメントを読んだ後、あなたがやろうとしていることは、さまざまな種類のオブジェクトを含む配列をアーカイブ/アーカイブ解除することであることはほぼ明らかです。したがって、次を使用してみてください。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

NSData次に、電子メールメッセージ(または必要な他の永続性レイヤー)の添付ファイルとして送信できるオブジェクトを取得します。

このアプローチは、配列に格納されているオブジェクトがNSCodingプロトコルをサポートしている場合にのみ機能することに注意してください(使用している各タイプのリファレンスで確認できます。サポートされているすべてのプロトコルが明確にリストされています)。オブジェクトがすでにNSDataとして保存されていると言っていることを考えると、問題はないはずです。アレイをアーカイブするだけなので、必要に応じて後でアーカイブを解除できます。

をサポートしないカスタムタイプがある場合は、オブジェクトのエンコードとデコードNSCodingの説明に従って実装する必要があります。

古い答え:

私はあなたの問題を理解しているとは思いませんが、使用するのはどうですかcomponentsJoinedByString:

例えば:

NSString *string = [viewArray componentsJoinedByString:@"\n"];

このようにすると、配列のコンテンツ(文字列で構成されている場合)が文字列のリストとして表示されます。を使用するdescriptionと、配列はフォーマットをあまり制御せずに文字列に変換されます(中括弧やその他の構文糖衣が追加されます)。

于 2012-04-21T09:15:37.390 に答える
2

あなたがやりたかったのは、のすべての要素にループを作成し、viewArrayそれらをNSStringに追加することだったと思いますstring。ただし、@ sergioが示唆しているように、私はcomponentsJoinedByStringより良いオプションだと思います。

これは、その変更でメソッドがどのようになるかを示しています。メソッドの他の部分もクリーンアップしました。recipients元のバージョンでは、メモリリークが発生したようです。

- (IBAction)sendEmail
{
    NSLog(@"sendEmail");

    [textView resignFirstResponder];

    [textView1 resignFirstResponder];

    if ([MFMailComposeViewController canSendMail])
    {
        // set the sendTo address
        NSArray *recipients = [NSArray arrayWithObject:@"example@yahoo.com"];

        MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
        controller.mailComposeDelegate = self;

        [controller setSubject:@"Iphone Game"];

        NSString *string = [viewArray componentsJoinedByString:@"\n"];

        [controller setMessageBody:string isHTML:NO];

        [controller setToRecipients:recipients];

        [self presentModalViewController:controller animated:YES];
        [controller release];

    }
    else 
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                        message:@"Your device is not set up for email." 
                                                       delegate:self 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles: nil];

        [alert show];

        [alert release];
    }

}

これにより、の要素が結合され、各要素の間viewArrayに改行が配置され\nます。@"\n"を置き換え@""たり、@" "やりたいことに応じて置き換えることができます。配列の要素がNSStringsでない場合は、elementsdescriptionメソッドが呼び出され、その出力が結果の文字列で使用されます。

于 2012-04-21T09:32:04.823 に答える
1

文字列に使用する形式によって異なります。配列の説明はいつでも次のように使用できます。

NSString *myString = [myArray description];
于 2012-04-21T09:15:15.987 に答える