我怎么能转换成NSMutableArray中的NSString?(How can I convert

2019-09-16 15:37发布

我想转换(或复制?)一个NSMutableArrayNSString 。 我想我的问题是,我真的不理解的结构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];
    }
}

Answer 1:

编辑:

读您的评论后,它是非常清楚,你正在尝试做的是存档/解除存档包含各种对象的数组。 所以,你应该尝试使用:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

得到一个NSData对象,你就可以发送与电子邮件(或者你需要的任何其他持久层)的附件。

请记住,这种做法将工作仅当存储阵列中的对象支持NSCoding协议(您可以检查在您所用每一种类型的基准:它清楚地列出了所有支持的协议)。 认为,你说你的对象已经被存储为NSData的,应该没有问题。 只要归档阵列,这样你就可以在稍后解除封存,如果需要的话。

如果您有不支持某些自定义类型NSCoding ,你需要在描述来实现其编码和解码对象 。

OLD答案:

我不知道我理解你的问题,但如何使用componentsJoinedByString:

例如:

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

做这样的,你的阵列的内容(只要它是由字符串)将作为一个字符串列表。 如果您使用description ,你的阵列将被转换成字符串,不给你上它的格式太多的控制(这将增加花括号和其他语法糖)。



Answer 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"@""@" "这取决于你想要做什么。 如果数组的元素没有NSString当时的元素description方法将被调用和所得到的字符串中所使用的输出。



Answer 3:

取决于你想你的字符串的格式。 你总是可以使用数组的描述是这样的:

NSString *myString = [myArray description];


文章来源: How can I convert NSMutableArray into NSString?