我想转换(或复制?)一个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];
}
}
编辑:
读您的评论后,它是非常清楚,你正在尝试做的是存档/解除存档包含各种对象的数组。 所以,你应该尝试使用:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
得到一个NSData
对象,你就可以发送与电子邮件(或者你需要的任何其他持久层)的附件。
请记住,这种做法将工作仅当存储阵列中的对象支持NSCoding
协议(您可以检查在您所用每一种类型的基准:它清楚地列出了所有支持的协议)。 认为,你说你的对象已经被存储为NSData的,应该没有问题。 只要归档阵列,这样你就可以在稍后解除封存,如果需要的话。
如果您有不支持某些自定义类型NSCoding
,你需要在描述来实现其编码和解码对象 。
OLD答案:
我不知道我理解你的问题,但如何使用componentsJoinedByString:
例如:
NSString *string = [viewArray componentsJoinedByString:@"\n"];
做这样的,你的阵列的内容(只要它是由字符串)将作为一个字符串列表。 如果您使用description
,你的阵列将被转换成字符串,不给你上它的格式太多的控制(这将增加花括号和其他语法糖)。
我怀疑你想要做的是在所有的元素创建一个循环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
方法将被调用和所得到的字符串中所使用的输出。
取决于你想你的字符串的格式。 你总是可以使用数组的描述是这样的:
NSString *myString = [myArray description];