2

我是 iOS 编程新手,正在尝试找出如何中断程序流以等待响应。

基本上我想从我的应用程序发送一封电子邮件,并提供数据是什么,我想提示用户添加更多信息。

IE:

- (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
}

我不确定这是否可能没有回调。基本上我想打断流程,放置一个覆盖并等待它在完成电子邮件之前关闭......

4

3 回答 3

1

据我了解,您尝试做的是显示自定义对话框或警报视图,并且仅在其返回值上,代码应该进一步执行。

所以可以说,如果你在里面显示一个UIAlertViewwithUITextView来添加更多信息,你应该把你的sendEmail方法移到 alertview 按钮的回调中。同样,如果您要使用一些自定义对话框,那么您应该在自定义对话框中编写一个回调到主窗口,然后在该回调中,您应该编写用于发送电子邮件的代码。

我认为,像这样的回调机制是您选择的唯一解决方案,如果您希望所有内容都写在同一个代码块中,那么您可以使用objective-c中的块

于 2013-09-02T03:31:12.290 回答
0

需要设计流程,以便在提示电子邮件时它已设置好所有内容并创建了一个带有按钮的窗口,此时您的代码已经完成并且没有做任何事情。然后,当按下按钮时,调用下一个函数/方法,该函数/方法使用事先准备好的数据。

于 2013-09-02T01:50:53.503 回答
0

我使用 MB Progress 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];
于 2013-09-02T01:51:29.670 回答