我在自定义UITableViewCell
中有两个标签。它们的目的是指示由单元表示的对象的定时操作的状态。
一个标签显示一个计数计时器。另一个只是眨眼“定时睡觉”。它们的可见性是互斥的(如果一个是可见的,另一个不可见,反之亦然)根据switch语句来确定当前可见的标签。每个都由专用的NSTimer
驱动。
一切正常 - 直到我对另一个视图控制器进行模态转换(为了添加其他实体或其他任务),然后通过Cancel
或Save
返回到原始VC代表团。然后,无论在segue之前哪个标签可见(并通过其计时器更新),都不会看到标签。单元格显示为空白。
奇怪的是,当我通过push segue转向另一个VC时,然后通过“Home”按钮返回,标签出现,闪烁或计数,就好像什么也没发生过一样。我可以在两种返回方法之间看到的唯一明显的区别是模式是通过委托来处理的,而推送是通过导航控制器解开的。
有什么想法吗?我可以提供任何相关代码,但不知道从哪里开始,也不想粘贴所有代码。
谢谢!
编辑以回应下面的问题进行澄清:
我正在通过代表团回来。这是模态中的代码:
- (IBAction)saveButton:(UIBarButtonItem *)sender
{
if (self.activityField.text.length > 0)
{
if (self.categoryLabel.text.length < 1)
{
// self.thisActivity.category = @"Uncategorized";
// self.thisActivity.name =self.activityField.text;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No category selected"
message:@"Please select a category or Cancel"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
else
{
self.thisCategory.name = self.categoryLabel.text;
self.thisActivity.name = self.activityField.text;
self.thisActivity.category = self.thisCategory.name;
NSLog(@"Category name is %@", self.thisCategory.name);
NSLog(@"Activity name is %@", self.thisActivity.name);
[self.delegate addActivityViewControllerDidSave];
}
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No activity entered"
message:@"Please enter a new activity or Cancel"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
- (IBAction)cancelButton:(UIBarButtonItem *)sender
{
[self.delegate addActivityViewControllerDidCancel:self.thisActivity];
NSLog(@"delegate is %@",self.delegate);
}
这是来自原始VC的委托方法实现代码:
#pragma mark - AddViewControllerDelegate stuff
-(void) addActivityViewControllerDidSave
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[localContext MR_saveToPersistentStoreAndWait];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
[self refreshData];
}
-(void) addActivityViewControllerDidCancel:(WMDGActivity *) activityToDelete
{
[activityToDelete MR_deleteEntity];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
[self refreshData];
}
第二次修改:
以下是refreshData
代码:
-(void) refreshData
{
actFRC = [WMDGActivity MR_fetchAllSortedBy:@"category,name"
ascending:YES withPredicate:nil
groupBy:@"category"
delegate:nil];
[self.myTableView reloadData];
}
我试过在viewDidLoad中调用此方法,而不是在那里调用它。相同的结果。
更新,2014年3月26日:
好的,我发现如果我从refreshData
方法移除对addActivityViewControllerDidCancel
的调用,则标签可以正常工作。如果我从addActivityViewControllerDidSave
删除相同的行,它们同样可以正常工作。不幸的是,这会阻止新添加的项目出现在HomeViewController
表格视图中,直到应用程序重新启动。
以下是取消和保存方法的当前代码:
-(void) addActivityViewControllerDidSave
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[localContext MR_saveToPersistentStoreAndWait];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
[self refreshData];
}
-(void) addActivityViewControllerDidCancel:(WMDGActivity *) activityToDelete
{
[activityToDelete MR_deleteEntity];
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[localContext MR_saveToPersistentStoreAndWait];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
// [self refreshData];
}
我将此视为临时或临时修复。当然会对真正的治疗方法表示感谢。
谢谢!