我正在尝试创建一个临时的托管对象上下文,在用户输入信息的几个屏幕之后,我将该上下文与主上下文合并(以确保没有插入"不完整"的对象).这是我创建临时上下文以及如何在其中插入对象的方法:
if (!self.someManagedObject) {
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:@[[NSBundle mainBundle]]];
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
[storeCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:nil];
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:storeCoordinator];
self.someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeObject" inManagedObjectContext:managedObjectContext];
NSLog(@"%@", self.someManagedObject.managedObjectContext);
}
Run Code Online (Sandbox Code Playgroud)
这是其中的一部分viewDidLoad.在控制台中,它显示托管对象上下文具有值.
然而,就在这个if语句之后(即使在内viewDidLoad,self.someManagedObject.managedObjectContext也是nil.我可以看到为什么局部变量不再可用(它只是超出范围),但是仍然应该设置托管对象的属性,对吧?
我知道我可以创建一个属性来存储托管对象上下文,但我宁愿让它以这种方式工作.
我有一个带有几个叠加层的MKMapView.工作一切都很好,它的工作简单,令人难以置信.然而,有一件事我无法开展工作.这个想法很简单:当用户点击覆盖覆盖的区域时,必须出现带有关于该覆盖的一些信息的标注.叠加层都是MKPolygons,它遵循MKOverlay协议,因此遵循MKAnnotation协议.
MKOverlay协议符合MKAnnotation协议.因此,所有覆盖对象也是注释对象,可以在代码中视为一个或两个.如果您选择将叠加对象视为两者,则您负责在两个位置管理该对象.如果要为其显示叠加视图和注释视图,则必须在应用程序委托中实现mapView:viewForOverlay:和mapView:viewForAnnotation:方法.它还意味着您必须从地图的叠加层和注释数组中添加和删除对象.
这来自Apple文档.我试过这样的事情:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
aView.canShowCallout = YES;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我尝试过使用手势识别器,但我不知道除了使用canShowCallOut属性之外如何显示标注...
昨天我做了一个干净的Mountain Lion安装,我手动转移了所有文件.其中一个文件夹包含我的Xcode项目,其中一些项目中包含git存储库.我安装了Xcode 4.4,但是当我打开一个git项目时,它不再能识别出任何变化.也就是说,我可以进行更改并尝试提交,但它只是说"没有文件".项目导航器中的小M或A或其他任何内容都不会显示.我安装了命令行工具.git
我错过了什么?
任何人都可以向我解释NSAttributedString如何正确遵循MVC范式?我知道它不是从NSString继承的,但它仍然是一个字符串,所以我会说这是我模型的一部分.但是,在谈论MVC时,设置UI属性(如下划线,字体,阴影等)显然是View的一部分,所以我不确定这是如何遵循规则的.
背景:我有两个VC,A和B. VC A包含几个按钮和几个标签.当按下VC A中的按钮时,segue将显示VC B/C /等等.现在,当完成VC A/B/C时,segue正在展开,以便出现VC A. 对于大多数VC B/C/D等,我使用unwind方法,我通过该VC中的按钮触发(ctrl +拖动到"退出"图标).这很有效,因为在返回VC A时,会自动调用以下操作:
- (IBAction)returned:(UIStoryboardSegue *)segue {
// Here I do some stuff
}
Run Code Online (Sandbox Code Playgroud)
问题:现在,在其中一个辅助VC(例如D)中,事情有点特殊.在这个VC中,我以编程方式通过循环生成几百个按钮,然后检测正在按下哪个按钮,最后展开回VC A(没有特定按钮;任何按钮都会触发展开).我知道我可以这样做,例如使用它
[self dismissViewControllerAnimated: YES completion: nil]
Run Code Online (Sandbox Code Playgroud)
但是当返回VC A或使用此操作时,这不会触发上述操作
[self performSegueWithIdentifier:@"UnwindSegueIdentifier" sender:self]
Run Code Online (Sandbox Code Playgroud)
但是这将生成VC A的新实例,我不想要(因为VC A实例中的标签已经包含一些信息).
所以,我想要的是能够返回生成VC D的VC A的同一个实例,并触发上面列出的"返回"操作.因此,我希望获得与使用连接到"exit"图标的按钮时相同的效果,但是当按下VC D中的许多按钮时,我想以编程方式"在代码内"执行此操作.
有什么想法吗?
我正在尝试翻译这个Objective-C代码:
if ([[self.appStoreCountry stringByReplacingOccurrencesOfString:@"[A-Za-z]{2}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, 2)] length])
Run Code Online (Sandbox Code Playgroud)
所以我试着编写这段代码:
if !self.appStoreCountry.stringByReplacingOccurrencesOfString("[A-Za-z]{2}", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: 0, end: 2)).isEmpty
Run Code Online (Sandbox Code Playgroud)
问题是stringByReplacingOccurrencesOfString部分似乎没有返回字符串.我有来自xcode的错误消息:Cannot convert the expression's type 'Bool' to type 'String'.
我调查了一下并试了一下:
let replaced = self.appStoreCountry.stringByReplacingOccurrencesOfString("[A-Za-z]{2}", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: 0, end: 2))
Run Code Online (Sandbox Code Playgroud)
错误消息类似但更奇怪: Cannot convert the expression's type 'String' to type 'String'.
我做错了什么,或者我应该向Apple提交错误?
我想在dispatch_group_notify完成后得到一个布尔值。不幸的是,以下代码是错误的,我不知道如何执行...编译器告诉我“将'BOOL'(^)(void)'传递给类型'dispatch_block_t'(aka' void(^)(void ^))“有什么想法吗?
-(BOOL)saveToDB:(NSArray*)data{
// execute async the saveJSONDictionary
__block BOOL toReturn;
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_queue_create("saveJsonDictionary", 0);
dispatch_group_async(group, queue, ^{
for (int i = 0; i < [data count]; ++i) {
NSDictionary* item = (NSDictionary*)[data objectAtIndex:i];
[self saveJsonDictionary:item];
}
NSManagedObjectContext *moc = [[DatabaseManager sharedManager]managedObjectContext];
toReturn = [moc save:nil];
});
dispatch_group_notify(group, queue, ^BOOL{
return toReturn;
});
Run Code Online (Sandbox Code Playgroud)
}
对于某些情况,我建议阅读:
非常相关的问题:"来自View Controller"使用UIViewControllerContextTransitioning消失 非常相关的答案:https://stackoverflow.com/a/25901154/751268
我正在尝试实现一个自定义视图控制器转换,动画新视图控制器覆盖屏幕的一半,同时将呈现视图控制器缩小到90%(在窗口中心,在呈现的视图控制器下面).
首先,我的问题是viewFromKey:返回nil.要解决这个问题,答案提到:
如果要为呈现视图控制器的视图设置动画,则应考虑使用
UIModalPresentationFullscreen样式或继续使用UIModalPresentationCustom并实现自己的子类,UIPresentationController并shouldRemovePresentersView返回YES.
我做到了,并且viewFromKey:不再返回nil,但现在呈现视图控制器完全消失(这是有道理的,考虑到我明确说它应该通过实现shouldRemovePresentersView).
我将呈现视图控制器的视图添加到容器视图,但它仍然被删除.还有什么我应该做的才能让这个工作?
这是一些相关的代码:
UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey
UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
BOOL show = self.isPresentation;
UIView *menuView = show ? toView : fromView;
UIView *backView = show ? fromView : toView;
UIView *containerView = [transitionContext containerView];
[containerView addSubview:backView];
[containerView addSubview:dimmedView];
[containerView addSubview:menuView];
// Adjust transforms, alpha and perform animations …Run Code Online (Sandbox Code Playgroud)