Я собираюсь сделать из себя дурака, но я заметил здесь много дружелюбных и терпеливых людей, поэтому я просто попробую:
Я разрабатываю приложение для iPhone, которое содержит базу отзывов об автомобилях. Я хочу, чтобы пользователь мог поделиться отзывами по электронной почте. Поэтому, когда он / она находит интересную машину в приложении, он нажимает кнопку, и приложение создает электронное письмо через приложение Mail.app для iPhone.
Теперь. Я новичок, и я должен признать, что я не слишком знаком с управлением памятью на iPhone. Код, который я написал, этот конкретный почтовый метод, выходит из приложения со страшным сообщением «Программа получила сигнал:« EXC_BAD_ACCESS »». Немного Googling предполагает, что это результат плохого управления памятью.
С моим небольшим пониманием этого вопроса я начал явно инициализировать и впоследствии освобождать все временные переменные, как сумасшедший. Тем не менее, «EXC_BAD_ACCESS» продолжает появляться.
Интересный момент: как только я убиваю свое приложение, созданный URL все еще вызывает Mail.app и с радостью создает для меня письмо.
Пожалуйста, рассмотрите следующий пример кода и пристрелите меня.
- (IBAction) sendCartoFriend
{
CarAppDelegate *appDelegate = (CarAppDelegate *)[[UIApplication sharedApplication] delegate];
//Read the html template
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *emailFile = [resourcePath stringByAppendingPathComponent:@"MailDummy.html"];
NSMutableString *eMailRaw = [[[NSMutableString alloc] initWithContentsOfFile:emailFile]autorelease];
//set the variables
NSString *carNamePlaceholder = [[NSString alloc] initWithString:@"CarTitle"];
NSString *carName = [[NSString alloc] initWithString:car.shortname];
[eMailRaw replaceOccurrencesOfString:carNamePlaceholder withString:carName options:NSCaseInsensitiveSearch range:NSMakeRange(0, [eMailRaw length])];
[carNamePlaceholder release];
[carName release];
NSString *carReviewPlaceholder = [[NSString alloc] initWithString:@"CarReview"];
NSString *carReview = [[NSString alloc] initWithString:car.review];
[eMailRaw replaceOccurrencesOfString:carReviewPlaceholder withString:carReview options:NSCaseInsensitiveSearch range:NSMakeRange(0, [eMailRaw length])];
[carReviewPlaceholder release];
[carReview release];
//there are 5 more of these find/replace actions. the "CarReview" though is the biggest. It might contain several hundred of characters.
//compose the message
NSString *eMailSubject = @"Nice little car!";
NSString *encodedSubject = [[NSString alloc] initWithString:[eMailSubject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *eMailBody = eMailRaw;
NSLog(eMailBody);
NSString *encodedBody = [[NSString alloc] initWithString:[eMailBody stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *urlString = [[NSString alloc] initWithString:[NSString stringWithFormat:@"mailto:?subject=%@&body=%@", encodedSubject, encodedBody]];
NSURL *url = [[NSURL alloc] initWithString:urlString];
[urlString release];
[encodedBody release];
[encodedSubject release];
[eMailRaw release];
[[UIApplication sharedApplication] openURL:url];
[url release];
}