我的根视图控制器是一个UITabBarController.我试图在一个标签栏控制器的视图控制器上呈现一个模态视图控制器,但仍然允许使用标签栏转到另一个标签 - 换句话说,我希望模态只能中断到特定标签的流程,而不是整个应用程序.
为此,我在故事板中将呈现视图控制器的呈现样式设置为"过流上下文".我遇到的问题是,在呈现模态视图控制器并选择新选项卡后,呈现视图控制器的视图将从窗口中移除,并且在解除呈现的视图控制器时不会添加回窗口.在解除视图控制器之后,移动到另一个选项卡然后返回最终将呈现视图控制器放回窗口.
我使用Xcode中的'Tabbed'模板重现了我的问题.

在呈现模态之后 - 我为呈现的视图控制器添加了透明度,以便轻松查看呈现的视图控制器中发生的情况.

更改为第二个选项卡然后返回 - 现在已删除了呈现视图控制器的视图.

关闭模态会使呈现视图控制器仍然从窗口中删除它的视图.转到选项卡2并返回将视图添加回窗口.

我希望这是一个简单的我在故事板中忽略的事情,但事实上我可以在更改标签之前呈现模态并在其后面看到呈现的视图控制器,这让我觉得我已经正确设置了一些东西.
我不确定如何正确配置构建设置,以便我在另一个框架和我的应用程序目标之间共享框架 - 在这种情况下,共享框架是Facebook SDK,但我不确定这是否与我遇到的问题与否.
我怎么会喜欢的东西的工作:我想为我的框架,包括Facebook的SDK,因为我的应用程序导入我的框架,它可以访问Facebook的SDK.不幸的是我无法使用此配置构建.
首先,我unresolved identifier尝试从"我的应用程序"中引用Facebook SDK中的任何内容时收到构建错误.
如果我包含import FBSDKLoginKit,那个构建错误会消失,但我无法编译FBSDKLoginKit is not a dylib.如果我然后在"我的应用程序"目标构建设置中包含Facebook SDK框架,我最终可以构建和运行,但是在运行时我得到控制台日志警告所有FBSDK类都在"我的应用程序"和"我的框架"和那个"将使用其中一个.哪一个是未定义的." 这完全合情合理,因为我现在基本上编译了两次Facebook SDK.
我认为我上面描述的是一个伞形框架,据我所知,Apple不鼓励这样做.鉴于"我的应用程序"需要访问"FBSDK"和"我的框架",而"我的框架"需要访问"FBSDK",配置"我的应用程序"和"我的框架"的构建设置的正确方法是什么获取有关重复实现的控制台日志
我在UITableView中实现了动态行高的一些问题 - 但它不是我遇到问题的单元格,它是单元格内部的UILabel.
单元格只包含一个UILabel来显示文本.我的tableView:heightForRowAtIndexPath:通过使用NSString的sizeWithFont:方法计算将在其中的标签的高度来正确调整每个单元格的大小.
我有一个UITableViewCell的子类,它只保存连接在storyboard中的UILabel属性.在故事板中,我将其行设置为0,因此它将使用尽可能多的行,并将其lineBreak设置为Word Wrap.
以下是我设置单元格的方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];
cell.myLabel.text = [object cellText];
[cell.myLabel sizeToFit];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
当我构建这个时,我得到了我的表格视图,其中单元格的大小均为其内容的正确高度,但标签都是1行,只是在单元格的一侧运行.但是,如果我滚动表格让单元格离开屏幕,然后滚动回到它们,它们的标签将正确调整大小,单元格将看起来我最初的预期.
我也尝试用我正在计算行高的相同方法计算标签框架,并且我得到相同的行为 - 它不会正确绘制,直到它滚出屏幕再重新开启.
我找到了两种方法来解决这个问题,这两种解决方案都不是可接受的.
首先,如果在viewDidAppear中:我在tableview上调用reloadData,单元格和标签第一次正确绘制.这对我的情况不起作用,因为我将添加和删除此表中的单元格,并且我不希望每次添加单元格时都调用reloadData.
第二种解决方法对我来说似乎很奇怪 - 如果我将字体设置保留在UILabel上的默认系统字体17中,则单元格会正确绘制.一旦我改变了字体大小,它就会恢复到它没有正确绘制标签的行为,直到它离开屏幕并返回,或者在tableView上调用reloadData.
我很感激任何帮助.
我在格式化谓词以查找核心数据中的嵌套关系时遇到问题.我遇到过一些非常相似的问题/评论,我希望能帮助我找到正确的解决方案 - 但我仍然卡住了.

我正在尝试创建一个获取请求来搜索与Gadget的特定实例相关的所有Foo实例.
我首先尝试在Foo实体的fetchRequest上使用谓词:
[NSPredicate predicateWithFormat:@"ANY bar.widgets.gadget == %@", myGadget]
Run Code Online (Sandbox Code Playgroud)
但是这个获取请求返回0结果.我假设它是因为嵌套的多对多关系.
我想我需要使用一个子查询,我以前从未使用过.经过大量的研究和阅读,我试过了
[NSPredicate predicateWithFormat:@"SUBQUERY(bar.widgets, $w, ANY $w.gadget == %@).@count > 0", myGadget]
Run Code Online (Sandbox Code Playgroud)
我收到错误
SQLite错误代码:1,'没有这样的列:t2.ZGADGET'
所以,我认为我需要一个用于此场景的子查询,如果是这样,我该如何正确格式化它?
我在使用子上下文作为NSPrivateQueueConcurrencyType的暂存区时遇到问题.
视图控制器使用主上下文.Worker Context用于从API导入数据.我正在使用mergeChangesFromContextDidSaveNotification来合并Main和Worker上下文之间的更改.如果我将工人孩子的背景置于等式之外,事情似乎正常.
但是,我想在导入对象时使用worker子上下文作为便笺簿.一些数据需要构建嵌套对象,如果构建过程中某处出现错误,我想抛弃那个上下文.如果构建成功,我希望能够保存工作者子上下文,让它将更改推送到工作者上下文,然后可以将更改保存并合并到主上下文.
但是,当我尝试在Worker子上下文中执行获取请求来执行查找或创建时,即使它是performBlock在Worker子上下文中完成的,我也会得到一个多线程断言.
我不确定哪些代码片段有助于回答这个问题,但我主要担心的是我的整体方法不会起作用.将私有队列上下文作为另一个上下文的子项是个坏主意吗?
编辑:
我遇到的崩溃是工作者子上下文尝试执行获取请求以执行查找或创建操作.它没有在谓词中使用任何托管对象,而是将其包装在一个performBlockAndWait.我得到的解释是'NSInternalInconsistencyException',原因:'语句仍处于活动状态' 崩溃是间歇性的,但到目前为止它似乎只有在我有嵌套的工作者子上下文时才会发生.(即我的图中的worker子上下文将具有自己创建对象的子上下文)
导致崩溃的获取请求始终用于查找或创建操作,因此它尝试获取具有与要导入的对象的标识符匹配的唯一标识符属性的任何对象.所以谓词总是像"identifier in ["1234", "abc", "etc" ]
正如我在评论中提到的,我最初使用的是PSC - >私有上下文 - >主要上下文 - >私有工作者上下文设置.我在导入数据时工作者上下文获取和保存时遇到UI冻结,所以我试图重构这个堆栈以释放UI.
ios ×5
core-data ×2
concurrency ×1
frameworks ×1
iphone ×1
nspredicate ×1
objective-c ×1
uikit ×1
uilabel ×1
uitableview ×1
xcode ×1