2013-09-02 4 views
2

Я новичок в программировании на iOS, и я пытаюсь выяснить, как прервать поток программы, чтобы ждать ответа.iOS Program Flow - Ждите ввода пользователя

В принципе, я хочу отправить электронное письмо из своего приложения и предоставить данные, я хочу предложить пользователю добавить дополнительную информацию.

т.е.

- (IBAction)sendEmail:(id)sender { 

MyManagedObject *myObj = nil; 

//Retrieve from the database. 
NSManagedObjectContext *ctx = [self managedObjectContext]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyManagedObject" inManagedObjectContext:ctx]; 
[request setEntity:entity]; 

NSError *error; 
NSArray *array = [ctx executeFetchRequest:request error:&error]; 
NSUInteger count = [array count]; // May be 0 if the object has been deleted. 
if (count > 0) { 
    myObj = (MyManagedObject *)[array objectAtIndex:0]; 
} 

//Recipients 
NSArray *toRecipents = [[NSArray alloc]init]; 
// Email Subject 
NSString *emailTitle = [@"Report for Month of: " stringByAppendingString: dateString] ; 
// Email Content 
NSString *messageBody = @""; 
if(myObj != nil) { 
    if (myObj.firstName) { 
     messageBody = [messageBody stringByAppendingString:[@"\nHello " stringByAppendingString: myObj.firstName]]; 
     toRecipents = [NSArray arrayWithObject:myObj.emailAddress]; 
    } 
} 
messageBody = [messageBody stringByAppendingString:@"\n\nBelow is my text...."]; 
messageBody = [messageBody stringByAppendingString:[@"\nMore Information...: " stringByAppendingString: myObj.moreInfo]]; 

NSString *addInfo = OPEN WINDOW FOR USER TO ADD INFO 

if (addInfo != nil) { 
messageBody = [messageBody stringByAppendingString:[@"\nAdditional Information...: " stringByAppendingString: addInfo]]; 
} 

... send the email 
} 

Я уверен, если это возможно без обратного вызова. В основном я хочу прервать поток, поставить накладку и дождаться ее закрытия до завершения отправки по электронной почте ...

ответ

1

От мое понимание, то, что вы пытаетесь сделать, это показать пользовательский диалог или alertview и только на его ret значение urn, код должен выполняться дальше.

Так скажем, если вы указали UIAlertView с UITextView внутри для добавления дополнительной информации, вы должны переместить свой метод sendEmail на обратный вызов кнопки alertview. Аналогично, если вы собираетесь использовать какой-то пользовательский диалог, тогда вы должны написать обратный вызов в своем специальном диалоговом окне в главное окно, а затем в этом обратном вызове, вы должны написать код для отправки электронной почты.

Я думаю, механизм обратного вызова, как это единственное решение для того, что вы выбираете, и если вы хотите, чтобы все было написано в том же блоке кода, то я вы можете использовать blocks in objective-c

+0

Спасибо, я боялся этого. Моя проблема в том, что мне не нужен вид предупреждения во всех обстоятельствах, и мне нужно только проверить его, как только был сделан запрос по электронной почте. Я предполагаю, что я мог бы структурировать его по электронной почте, построенной в методе, который вызывается либо из отправленной почты, либо из обратного вызова из представления предупреждения, и отправляет почтой проверку состояния и определяет, чтобы перейти непосредственно к фактическому методу построения или представлению предупреждения .. –

+0

Да, вы правы. У вас должен быть отдельный метод отправки электронной почты, если он готов к отправке, и который может быть вызван либо методом sendEmail, либо методом обратного вызова. – HRM

0

Поток должен быть спроектирован так, чтобы при появлении сообщения электронной почты он установил все и создал окно с кнопкой, в этот момент ваш код закончил и ничего не делает. Затем, когда нажата кнопка, вызывается следующая функция/метод, который использует данные, которые были подготовлены перед началом работы.

0

Я использую MB Прогресс HUD https://github.com/jdg/MBProgressHUD

я думаю, это то, что вы ищете. Он покажет загрузчик, который накладывается как наложение на представление, в которое оно добавлено. Вы можете использовать его как это:

в интерфейсе добавить

MBProgressHUD *HUD; 

Тогда называем это когда даже вам нужно

-(void) showHUD { 
    HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
    HUD.labelText = @"Loading"; 
    HUD.detailsLabelText = @"Please Wait ..."; 
    HUD.mode = MBProgressHUDModeIndeterminate; 
    [self.tableView addSubview:HUD]; 
    [HUD show:YES]; 
} 

И, наконец, чтобы скрыть его

[MBProgressHUD hideHUDForView:self.tableView animated:YES]; 
+0

Благодарности - но я не Думаю, это сработает для того, что я намереваюсь сделать. В основном я хочу выборочно всплывать модальности ввода, в которой пользователь может добавить текст для добавления в электронную почту, только в определенных обстоятельствах. В основном я хочу проверить условие, и если true, всплывающее оверлей, чтобы получить информацию, и если не продолжить без нее. Вероятно, я мог бы использовать обратный вызов, но я бы предпочел обработать его в методе отправки. –

Смежные вопросы