问题标签 [moc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
420 浏览

multithreading - 核心数据嵌套NSManagedObjectContext,如何正确共享和管理数据?

这是我在stackoverflow中的第一篇文章。因为我遇到了即使在google和文档中查找也无法解决的问题。

我有一个小的 iOS 项目,它是一个天气搜索应用程序。基本上总体上很容易实现,但是我必须遵循一些规则:

链接到持久存储(在磁盘上)的后台线程上的一个父上下文;UI 主线程上的一个子上下文;后台线程上的一个子上下文,用于与 Web 服务对话。

看到这个后,我在网上找到了一张图片: 在此处输入图像描述

此图像显示了该项目究竟应该做什么。我现在遇到的问题很少。

  1. 如图所示,我使用[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]定义我的主 UI MOC,并使用 NSPrivateQueueConcurrencyType 定义我的 webMOC 和 diskMOC。问题是,我应该将所有内容都放入 [UIMOC performBlock: ^{......}] 吗?

  2. 我现在很困惑,UI不是在主线程上运行吗?那么 NSMainQueueConcurrencyType 的意义何在?

  3. 看了很多文档,发现childMOC和parentMOC之间共享数据的方式要么是让childMOC运行“保存”功能,要么是通过通知调用merge函数。(a) 对于第一个,我需要先 [childMOC save] 然后再做 [parentMOC save] 吗?还是在 [childMOC save] 之后,parentMOC 会自动更新?(b) 我不确定哪种方式更合适。

  4. 上图有 3 个级别的 MOC。如果我在最低级别的 MOC 上执行“保存”功能,最高级别的 MOC 可以共享数据吗?

  5. 正如我所想,为什么不能将最低级别的MOC与最高级别的MOC结合起来进行读写?同时,中间的UIMOC,是不是必须放到Context的performBlock函数中才能运行NSFetchedResultController?

0 投票
1 回答
139 浏览

objective-c - 异步获取大量资源并将它们“异步”保存到数据库中。使用哪种好模式?(AFNetworking,核心数据)

我需要用注释填充我的地图。每个注释都有从远程服务器获取的相应 Place 资源。每个地方都有关联的类别 - 它也作为单独的资源从服务器获取。

假设要填充给定区域,我需要获取 100 个位置,每个位置属于 20 个类别之一(实际上还有更多)。

我使用 AFNetworking 来获取这两种资源。我尝试缓存地点和类别以供离线使用,因此在地图上显示注释之前,我将获取的资源写入核心数据表。

每个地方都按需求检索其关联的类别资源,我需要在“地方”表中写一个地方,在“类别”表中写一个类别。

由于获取是异步完成的,当将特定类别写入表时,我不知道是否可能另一个地方“线程”尝试将相同的关联类别写入“类别”表。

所以,问题是:当需要用异步检索的信息填充它们时,使用 Core Data 表的模式是什么?具体来说,任何要编写类别的给定线程如何知道已经有一个线程正在尝试这样做?

更新 1:我目前的问题是目前我有重复的类别。我的猜测是,显然每个尝试写入的类别都不知道同一类别的并行写入。

更新2:我的案例最简单的描述如下:

我在一个线程中创建了一个新的 Category 实体,其中包含一些字段,同时在另一个线程中,我创建了具有相同字段的完全相同的 Category 实体,旨在成为与第一个线程相同的 Category 对象。

一个线程赢得调用[managedObjectContext save:&error],但是在实际记录出现在 PersistentStore 之前,第二个线程也调用了保存。问题是:如何防止“类别”表中的记录重复?

更新 3:我正在考虑使用托管对象上下文的两种变体:1)所有线程重用一个共享 moc 实例 2)在每个线程上实例化一个新 moc

谢谢!

0 投票
2 回答
497 浏览

objective-c - Is it possible to reuse one shared managed object context beetween threads, when each thread can work with data not related to data in other thread?

Simple example for the title question: one thread has prepared Place entity and is doing some processing on it (filling particular fields and their calculation takes time) and in the mean time the other thread has already prepared Category entity; the second "Category" thread wants to persist Category entity with save:&error causing Place entity from the first thread to be saved also while it didn't finished its processing job.

Am I right? Will I see the problem described if I use one shared moc?

Thanks!

0 投票
1 回答
1717 浏览

visual-studio-2010 - 如何使用 Qt VS 插件向 Visual Studio 中的 Qt 项目添加新配置?

我需要向使用 QT Visual-Studio-add-in 创建的 Visual Studio 项目添加新配置(除调试和发布之外)。

问题是 moc 文件不会自动添加到项目中。

QT Visual-Studio-add-in在哪里存储了基于现有头文件添加moc_file的配置规则?

如果我生成像 Release_Special 这样的新配置,则在包含文件的项目中应该有一个新的过滤器 Release_Special

moc_Test1.cpp moc_Test2.cpp

具有正确的排除规则。

我正在使用 VS2010 和 qt 4.8.3。

谢谢你,最好的问候MS

0 投票
1 回答
2211 浏览

c++ - 在 QML 中使用 C++-slot,它返回命名空间中的类型

我首先要提一下,在 Qt 5.0.0 beta 1 之前,以下内容可以正常工作(可能还有 beta 2 和 RC,不知道),但在 Qt 5.0.0 最终版本中失败了。我只想参考在 Qt 5.0.0 最终发布版本中看到的结果。所以这很可能与 Qt5 最近的变化有关。

在 C++ 方面,我在命名空间中有一组类(QObject 派生)(可以选择使用编译器标志触发;这些类位于单独的库中,并且该库将命名空间的使用作为选项留给图书馆)。这里的一个类Game可能如下所示(摘录):

OAE_BEGIN/END_NAMESPACE扩展为namespace OAE_NAMESPACE {...}或什么都没有,就像 Qt 在 中所做的那样<qglobal.h>,只是将宏名称中的“QT”替换为“OAE”:

在下文中,当说“启用命名空间”时,我的意思是我声明了宏OAE_NAMESPACE,在本例中为值oae

其中,我访问了这个类的实例以及从 QML 中Player返回的类的实例,用于我的应用程序的用户界面。player()为此,我按如下方式注册类:

我为 QML 前端提供了一个指向 a 实例的指针,在 QMLGame中调用theGame

在 QML 中,我照常使用它。一个小例子应该打印一个指针地址player()

我得到以下结果,具体取决于我是否设置了 a OAE_NAMESPACE(顺便说一句:我对库和使用它的应用程序使用相同的设置):

  • 禁用 namespace时,一切都按预期工作,QML 向我打印指针:

    /li>
  • 启用命名空间时(以及using它在使用库的 C++ 代码中,所以我根本不更改代码),QML 无法理解的返回类型Game::player()

    /li>
  • 返回类型更改Game::player()to 时 oae::Player*,一切正常:

    /li>

到目前为止,我的结论是moc不考虑我放在类周围的名称空间。我的第一个猜测是:嘿,moc不知道我在调用时定义了命名空间g++,这是我在 .pro 文件中所做的:

但是,当将返回类型更改为 时OAE_NAMESPACE::Player*,它仍然有效,因此 moc确实知道OAE_NAMESPACE宏,但它既不扩展OAE_BEGIN/END_NAMESPACE宏,也不再解析命名空间。

moc生成以下“stringdata”,Player * Game::player() const其中包含方法的返回类型:

  • 禁用命名空间并使用返回类型时Player*

    /li>
  • 启用命名空间并使用返回类型时Player*

    /li>
  • 启用命名空间并使用返回类型时OAE_NAMESPACE::Player*

    /li>

另一方面,如果启用,则在命名空间moc返回的类名前面加上命名空间。QMetaObject::className()

我现在的结论是,我可以通过编写OAE_NAMESPACE::ClassName而不是ClassName在 QObject 元方法的签名中使用这些类型来解决这个问题。(嗯,有更好的宏OAE_PREPEND_NAMESPACE)。由于这在代码中看起来很糟糕,而且对我来说它甚至似乎是错误的,因为该方法已经在 namespace中,有没有更好的解决方案?

现在也有OAE_BEGIN/END_MOC_NAMESPACE(类似于QT_BEGIN/END_MOC_NAMESPACE),所以也许我在任何地方都需要那些?我不知道它们在 Qt 中的何处/如何使用,因此我应该在我的库中相应地使用它们,因为我想使用与 Qt 相同的可选命名空间功能。

0 投票
1 回答
1352 浏览

qt - 在构建期间制作 moc 跳过文件/文件夹

这是一个已知的错误,即 moc 跳过 libstdc++ 中使用的宏,如下所述:http://lists.kde.org/?l=necessitas-devel&m=132317657926916&q= raw

我正在尝试编译一个使用 gcc 4.6.3 的项目并且因为 moc 跳过宏而被卡住。

解决该问题的一种方法是包含此链接中提到的指令:

http://doc.qt.io/qt-4.8/moc.html

但这很耗时,而且不是很干净的方法,因为每个文件都必须有这些指令。

我想知道的是,可以配置 qmake 以使 moc 跳过某些目录/文件吗?

编辑:错别字

0 投票
1 回答
710 浏览

makefile - moc Makefile 规则

在我搜索的任何地方,我都会看到这个有用的规则

它不起作用。Makefile 去

未注释的注释行有效,但一般规则无效。它打印出来No rule to make target 'moc_file.cpp', needed by 'moc'任何人都可以提供任何见解为什么它没有或我做错了什么?

0 投票
2 回答
488 浏览

c++ - Qt MOC 生成代码文档

我正在 Qt 中设计一个用户界面,出于长寿的原因,我不想在未来的构建中使用 Qt Meta-Object Compiler。我知道 MOC 会解析标准 C++ 代码中的某些宏,并根据这些宏生成 C++ 代码。

我想知道的是:这个生成的代码的文档在哪里?我想将生成的代码直接写到我的相关类中。虽然现在这可能很麻烦,但如果 Qt 消失并且 MOC 不复存在,它将避免任何问题,从而使 UI 在长期内更加稳定。

谢谢!

编辑 1: 我正在 Visual Studio(不是 Qt Creator)中为不基于 Qt 框架的 C++ 应用程序设计基于 Qt 的 UI。我希望能够分发可以构建为纯 C++ 的代码,其中 Qt 代码链接自将被打包的特定库。我希望能够在未安装 Qt 的系统上构建此代码。因此希望避免 MOC。我不想冒犯任何 Qt 粉丝,Qt 很棒。但是,我在这个项目上需要一些不同的东西,所以“只使用 MOC”的建议根本没有帮助。

编辑2:当我错了时,我有足够的能力承认。经过更多的思考和研究,显然不值得尝试我计划做的事情。我只需要保存 MOC 生成的代码并分发它。谢谢大家。

0 投票
2 回答
385 浏览

visual-studio-2010 - 如何在 vs2010 项目中向 moc 添加特定标志?

我正在尝试解决此错误,建议的解决方法是传递-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED给 moc.exe。

这个问题与我的有关。不同之处在于我想在 VS2010 项目(VS 插件)中添加 MOC 标志。

我试过左键单击 -> Qt Project Setting -> MocOptions并添加-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

请注意,我的问题是使用 boost 1.53 发生的。

0 投票
1 回答
170 浏览

core-data - 核心数据在多次保存时冻结应用

我在将数据保存在核心数据中时遇到问题。我必须通过单击按钮将多个书籍信息保存在数据库中。当我单击按钮时,我调用该方法并将书籍信息保存在数据库中。前三下点击可以很好地保存图书信息,并且 ui 也是响应式的。当我第四次单击该按钮时,用户界面会在保存结束时冻结。

代码如下。

我创建了一个临时 MOC,因为代码在后台线程中,每次保存后我都会发送通知。

对于按钮应用程序的第四次点击获得冻结。我被困在这一点上。