2012-04-21 4 views
5

NSMutableArrayNSString으로 변환하려고합니다 (또는 복사합니까?). 나는 내 문제가 인 것을 짐작한다. 나는 NSString의 구조를 정말로 이해하지 못한다. 변환 후 이메일 본문에 첨부하고 싶습니다. 여기 내 코드는 다음과 같습니다.어떻게 NSMutableArray를 NSString으로 변환 할 수 있습니까?

- (IBAction)sendEmail 
{ 
    NSLog(@"sendEmail"); 
    [textView resignFirstResponder]; 
    [textView1 resignFirstResponder]; 
    if ([MFMailComposeViewController canSendMail]) 
    { 
     // set the sendTo address 
     NSMutableArray *recipients = [[NSMutableArray alloc] initWithCapacity:1]; 
     [recipients addObject:@"[email protected]"]; 
     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]; 
    } 
} 
+2

무엇이 문제입니까? 명확하게 설명 할 수 있습니까? – Dinesh

+0

같은 : -http : //stackoverflow.com/questions/8802543/how-to-convert-nsmutablearray-into-nsstring/8802630#8802630 – Leena

답변

9

편집 :

당신의 코멘트를 읽은 후, 그것은 거의 분명 당신은/보관 각종의 객체를 포함하는 배열 아카이브 해제되어 무엇을하려고 종류. 그래서, 당신은 사용하여 시도해야합니다 : (당신이 필요로하는 어떤 다른 지속성 층 또는에서)

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 

당신이 다음 이메일 메시지에 첨부 파일로 보낼 수있는 NSData 개체를 얻을 수 있습니다.

배열에 저장된 객체가 NSCoding 프로토콜을 지원하는 경우에만이 방법이 작동합니다 (사용중인 각 유형에 대한 참조에서 지원되는 모든 프로토콜이 명확하게 나열되어 있는지 확인할 수 있음). 귀하의 개체가 NSData로 이미 저장되어 있다고 판단되면 아무런 문제가 없어야합니다. 배열을 보관하면 필요한 경우 나중에 보관 취소 할 수 있습니다.

NSCoding을 지원하지 않는 사용자 지정 유형이있는 경우 Encoding and Decoding Objects에 설명 된대로 구현해야합니다.

OLD 답변 :

나는,하지만 componentsJoinedByString:

예를 사용하는 방법에 대한 문제 이해 확실하지 오전 :

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

과 같이 수행을 배열의 내용은 (그것을 제공 문자열로 구성)은 문자열 목록으로 표시됩니다. description을 사용하는 경우 배열은 형식에 대한 제어력을 크게 내지 않고 문자열로 변환됩니다 (중괄호 및 기타 구문 설탕이 추가됩니다).

+1

아마 그것은 단지'NSString * string = [viewArray componentsJoinedByString : @ "\ n"];'이어야 할 것입니다. 원래 게시물의 코드를 보면 기존에 추가 할 문자열이 없습니다. – mttrb

+0

@ mttrb : 너는 완전히 정확하다, 고마워! 아아, 야생 복사/붙여 넣기 ... – sergio

+0

제발, 내 편집을 참조하십시오 ... 빠른 응답을 위해 – sergio

1

문자열에 원하는 형식에 따라 다릅니다. 당신은 항상이 같은 배열의 설명을 사용할 수

NSString *myString = [myArray description]; 
+0

또한 이러한 모든 사용자 지정 개체는 NsData Formate의 nsmutablearray에 저장됩니다. – jamil

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:@"[email protected]"]; 

     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 요소가 호출되고 결과 문자열에 사용 된 출력이 호출됩니다.

관련 문제