我正在尝试将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];
}
}
答案 0 :(得分:9)
编辑:
阅读完评论之后,很明显你要做的是归档/取消归档包含各种对象的数组。所以,你应该尝试使用:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
获取NSData
对象,然后您可以将其作为带有电子邮件的附件(或您需要的任何其他持久层)发送。
请记住,只有当存储在数组中的对象支持NSCoding
协议时,此方法才有效(您可以在参考中检查您正在使用的每种类型:它清楚地列出了所有支持的协议) 。考虑到你说你的对象已经存储为NSData,应该没有问题。只需归档数组,以便以后可以根据需要取消归档。
如果您有一些不支持NSCoding
的自定义类型,则需要按Encoding and Decoding Objects中所述实现它。
老答案:
我不确定我是否理解您的问题,但使用componentsJoinedByString:
E.g:
NSString *string = [viewArray componentsJoinedByString:@"\n"];
这样做,数组的内容(假设它由字符串组成)将显示为字符串列表。如果您使用description
,您的数组将被转换为字符串,而不会对其格式进行太多控制(它将添加花括号和其他语法糖)。
答案 1 :(得分: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
s,那么将调用元素description
方法,并在结果字符串中使用它的输出。
答案 2 :(得分:1)
取决于您希望字符串具有的格式。你总是可以像这样使用数组的描述:
NSString *myString = [myArray description];