NSMutableArray Прикачен файл с данни с тяло на имейл?

Моите данни за NSMutableArray са във формат NSData. Опитвам се да прикача данни за NSMutableArray към тялото на имейла. Ето моя код за NSMutableArray:

   NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
   NSString *msg1 = [defaults1 objectForKey:@"key5"];
   NSData *colorData = [defaults1 objectForKey:@"key6"];
   UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
   NSData *colorData1 = [defaults1 objectForKey:@"key7"];
   UIColor *color1 = [NSKeyedUnarchiver unarchiveObjectWithData:colorData1];
   NSData *colorData2 = [defaults1 objectForKey:@"key8"];
   UIFont *color2 = [NSKeyedUnarchiver unarchiveObjectWithData:colorData2];
   CGFloat x =(arc4random()%100)+100;
   CGFloat y =(arc4random()%100)+250;  
   lbl = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, 70)];
   lbl.userInteractionEnabled=YES;
   lbl.text=msg1;
   lbl.backgroundColor=color;
   lbl.textColor=color1;
   lbl.font =color2;
   lbl.lineBreakMode = UILineBreakModeWordWrap;
   lbl.numberOfLines = 50;
   [self.view addSubview:lbl];
   [viewArray addObject:lbl ];

viewArray е моят NSMutableArray. Цялото хранилище на данни във viewArray е във формат NSData. Тогава как мога да прикача тези данни за viewArray с тялото на имейла. Ето моя имейл код.

 - (IBAction)sendEmail
{

if ([MFMailComposeViewController canSendMail])
{
  NSArray *recipients = [NSArray arrayWithObject:@"[email protected]"];
  MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] 
  init];
  controller.mailComposeDelegate = self;
  [controller setSubject:@"Iphone Game"];

   NSData *data = [NSKeyedArchiver archivedDataWithRootObject:viewArray];
   NSLog(@"testing: %@", data);
  [controller addAttachmentData:data mimeType:@"application/octet-stream";  
  fileName:nil]; 

  NSString *emailBody = @"Happy Valentine Day!";
  [controller setMessageBody:emailBody 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 показва тук обектите, които се съхраняват в него, а също и когато преобразувам viewArray в NSData, той показва байтове в конзолата. но не показва никакви данни в тялото на имейла.. което е във viewArray. моля, всяко ръководство как е възможно да прикача моите данни за viewArray с имейл.


person jamil    schedule 07.05.2012    source източник


Отговори (1)


От референция на MFMailComposeViewController за addAttachmentData:mimeType:fileName: :

име на файл

Предпочитаното име на файл за свързване с данните. Това е името по подразбиране, приложено към файла, когато се прехвърля до местоназначението му. Всички знаци за разделяне на пътя (/) в името на файла се преобразуват в знаци за долна черта (_) преди предаване. Този параметър не трябва да е нула.

Така че изглежда, че трябва да посочите правилно име на файл, който да се показва в тялото на пощата. Всякакъв низ ще свърши работа.

РЕДАКТИРАНЕ:

Страхувам се, че не мога да разбера коментара ви... както казах, успешно изпратих имейл с вашия код: това, което получавам, е plist файл, така че всичко работи според очакванията. Това е кодът, който използвам:

NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
NSString *msg1 = [defaults1 objectForKey:@"key5"];
UIColor *color = [UIColor grayColor];
UIColor *color1 = [UIColor grayColor];
UIFont *color2 = [UIFont systemFontOfSize:12];
CGFloat x =(arc4random()%100)+100;
CGFloat y =(arc4random()%100)+250;  
UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 100, 70)];
lbl.userInteractionEnabled=YES;
lbl.text=msg1;
lbl.backgroundColor=color;
lbl.textColor=color1;
lbl.font =color2;
lbl.lineBreakMode = UILineBreakModeWordWrap;
lbl.numberOfLines = 50;
[self.view addSubview:lbl];
NSMutableArray* viewArray = [NSMutableArray arrayWithCapacity:1];
[viewArray addObject:lbl ];


if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
    mailer.mailComposeDelegate = self;
    [mailer setSubject:@"Hello"];
    [mailer setToRecipients:[NSArray arrayWithObjects:@"mailAddress@mailAddress", nil]];
    NSString *emailBody = @"";
    [mailer setMessageBody:emailBody isHTML:NO];

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:viewArray];
    [mailer addAttachmentData:data mimeType:@"application/octet-stream" fileName:@"prova.plist"]; 

    [self presentModalViewController:mailer animated:YES];
    [mailer release];
}

Пътят, по който бих тръгнал във вашия случай е:

  1. забравете за прикачения файл за момент и се опитайте да ви изпратим обикновен текстов имейл;

  2. ако това работи, добавете и 2-та реда, които изпращат прикачения файл:

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:viewArray];
    [mailer addAttachmentData:data mimeType:@"application/octet-stream" fileName:@"prova.plist"]; 
    

И в двата случая задайте точка на прекъсване във вашия делегиран метод - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error и вижте кой клон се изпълнява:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
switch (result) {
        case MFMailComposeResultCancelled:
        case MFMailComposeResultSaved:
        case MFMailComposeResultSent:
        case MFMailComposeResultFailed:
        default:
        break;
    }
[self dismissModalViewControllerAnimated:YES];
}
person sergio    schedule 07.05.2012
comment
Благодаря @sergio.но все още не съм видял данните от масива си в имейла. - person jamil; 08.05.2012
comment
Странно... Изпробвах кода с правилно име на файл и освен че трябва да инициализирам color/color1/color2 сам (защото нямам зададени потребителски настройки по подразбиране), той работи и мога да видя прикачения файл в пощата тяло (не данни за масив, прикачен файл)... какво очаквате да видите? - person sergio; 08.05.2012