LaTeX怎么实现的嵌套关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LaTeX怎么实现的嵌套关系相关的知识,希望对你有一定的参考价值。
参考技术A eX 原生的数据结构,除了编号的几种寄存器(盒子、toks、字体等等……)之外,就只有宏。寄存器以编号访问,效果是全局的,eTeX 之后每种寄存器也有几万个,包装一下当数组用弄个栈什么的都行,再复杂就不行了。
一般使用还是只有宏。注意到 TeX 的 \csname 技术,在定义宏时,宏的名字也可以是变量,所以这所谓宏就是 hash 表。
像 Lua 等很多常见的脚本语言一样,TeX 只用 hash 表,来构造所有需要的数据结构。
用于关系的嵌套 NSManagedObjectContext 和 NSFetchedResultsController
【中文标题】用于关系的嵌套 NSManagedObjectContext 和 NSFetchedResultsController【英文标题】:Nested NSManagedObjectContext's and NSFetchedResultsController for relationships 【发布时间】:2014-03-21 13:23:05 【问题描述】:尝试使用 MagicalRecord 为我的 CoreData 实体实现添加/保存控制器,并使用按钮保存和取消。
- (void)addProduct
NSManagedObjectContext *context = [NSManagedObjectContext MR_context];
[context MR_setWorkingName:@"PRODUCT_ADD_MOC"];
ProductBaseEntity *entity = [ProductBaseEntity MR_createInContext:context];
[self presentProductSaveControllerWithEntity:entity andContext:context];
- (void)editProduct:(ProductBaseEntity *)entity
[self presentProductSaveControllerWithEntity:entity andContext:nil];
- (void)presentProductSaveControllerWithEntity:(ProductBaseEntity *)entity
andContext:(NSManagedObjectContext *)parentContext
if (!parentContext)
parentContext = [NSManagedObjectContext MR_contextForCurrentThread];
NSManagedObjectContext *context = [NSManagedObjectContext MR_contextWithParent:parentContext];
[context MR_setWorkingName:@"PRODUCT_SAVE_MOC"];
ProductBaseEntity *contextEntity = (ProductBaseEntity *)[context objectWithID:entity.objectID];
ProductSaveController *controller = [[ProductSaveController alloc] initWithEntity:contextEntity];
controller.managedObjectContext = context;
controller.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
style:UIBarButtonItemStylePlain
target:controller
action:@selector(cancel)];
controller.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Save"
style:UIBarButtonItemStylePlain
target:controller
action:@selector(done)];
[controller setDoneHandler:^(ProductSaveController *saveController)
if (context.hasChanges)
[context MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error)
[self dismissViewControllerAnimated:YES completion:nil];
];
else
[self dismissViewControllerAnimated:YES completion:nil];
];
[controller setCancelHandler:^(ProductSaveController *saveController)
if (context.hasChanges)
[OHAlertView showAlertWithTitle:@"Really exit?"
message:@"Exit and discard changes?"
cancelButton:@"Cancel"
okButton:@"Exit"
onButtonTapped:^(OHAlertView *alert, NSInteger buttonIndex)
if (buttonIndex == 1)
[self dismissViewControllerAnimated:YES completion:nil];
];
else
[self dismissViewControllerAnimated:YES completion:nil];
];
[self presentViewController:[[UINavigationController alloc] initWithRootViewController:controller] animated:YES completion:nil];
问题的第一部分是:这个实现看起来不错吗?我为保存控制器创建单独的上下文,然后我可以决定:我应该将更改保存在持久存储中(保存按钮)还是应该在不修改持久存储的情况下丢弃更改(取消按钮)。对于 addProduct,我再创建一个上下文,因为如果我调用 context.hasChanges
,它无论如何都会给我YES
,因为对象已插入到此上下文中。
顺便说一句,我的这部分代码工作得很好。
在ProductSaveController
中,我有一个打开SomeController
的按钮,其中包含与ProductBaseEntity
相关的实体(1:M)列表,称为ProductEntity
,使用NSFetchedResultsController
。
_fetchedResultsController = [ProductEntity MR_fetchAllSortedBy:@"position"
ascending:YES
withPredicate:predicate
groupBy:nil
delegate:self
inContext:self.managedObjectContext];
其中self.managedObjetContext
是来自presentProductSaveControllerWithEntity
方法的上下文。问题是我的控制器没有反映这个控制器的变化。例如我这样做:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
if (editingStyle == UITableViewCellEditingStyleDelete)
ProductEntity *entity = [_fetchedResultsController objectAtIndexPath:indexPath];
[entity MR_deleteInContext:_fetchedResultsController.managedObjectContext];
而我一无所有! tableView 中的这一行没有隐藏!但是,如果我单击后退按钮并再次打开此控制器,我会看到更改!如果我从 self.managedObjectContext
移动到 mainQueue 上下文,我的 fetchedResultsController 将按预期工作。 NSFetchedResultsController 是否应该与私有队列上下文一起使用??
【问题讨论】:
【参考方案1】:您正在删除实体,但您似乎没有响应删除并更新您的视图。您通常可以通过在视图控制器上实现 NSFetchedResultsControllerDelegate 来做到这一点
【讨论】:
NSFetchedResultsController 工作,只要我使用 MR_defaultContext。似乎 NSFRC 在私有队列上下文方面存在问题。以上是关于LaTeX怎么实现的嵌套关系的主要内容,如果未能解决你的问题,请参考以下文章