問題タブ [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.
multithreading - コア データのネストされた NSManagedObjectContext、データを適切に共有および管理する方法は?
これは、私にとってスタックオーバーフローの最初の投稿です。グーグルやドキュメントで調べても解決しない問題に遭遇したからです。
天気検索アプリである小さな iOS プロジェクトを取得します。基本的に全体的に実装するのは簡単ですが、従わなければならないルールがいくつかあります。
永続ストア (ディスク上) にリンクされているバックグラウンド スレッド上の 1 つの親コンテキスト。UI のメイン スレッド上の 1 つの子コンテキスト。Web サービスと通信するためのバックグラウンド スレッド上の 1 つの子コンテキスト。
これを見た後、私はオンラインで画像を見つけました:

この画像は、このプロジェクトで正確に何をすべきかを示しています。そして、私は今いくつかの問題を抱えています。
画像が示すように
[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]、メイン UI MOC を定義するために使用し、NSPrivateQueueConcurrencyType を使用して webMOC と diskMOC を定義します。質問は、 [UIMOC performBlock: ^{......}] にすべて入れましょうか?私は今かなり混乱しています.UIはメインスレッドで実行されていませんか? NSMainQueueConcurrencyType のポイントは何ですか?
多くのドキュメントを読んだ後、childMOCとparentMOCの間でデータを共有する方法は、childMOCに「保存」関数を実行させるか、通知を介してマージ関数を呼び出すことであることがわかりました。(a) 最初のものについては、[childMOC を保存] してから [parentMOC を保存] する必要がありますか? または[childMOC保存]の後、parentMOCは自動的に更新されますか? (b) どちらの方法がより適切かわかりません。
上の画像には 3 レベルの MOC があります。最下位レベルの MOC で「保存」機能を実行すると、最上位レベルの MOC でデータを共有できますか?
私が考えたように、最下位レベルの MOC を最上位レベルの MOC と組み合わせて読み書きできないのはなぜですか? ところで途中のUIMOCはNSFetchedResultControllerを実行するためにContextのperformBlock関数に入れないといけないのでしょうか?
objective-c - 多数のリソースを非同期的に取得し、それらを「非同期的に」データベースに保存します。どのパターンを使用するのが良いですか? (AFネットワーキング、コアデータ)
マップに注釈を追加する必要があります。各注釈には、リモート サーバーからフェッチされている対応する Place リソースがあります。各場所には関連付けられたカテゴリがあります。これもサーバーから個別のリソースとして取得されます。
特定の地域に居住するために、それぞれが 20 のカテゴリの 1 つに属する 100 の場所を取得する必要があるとします (実際には、さらに多くのカテゴリがあります)。
AFNetworking を使用して両方のリソースをフェッチします。場所とカテゴリの両方をオフラインで使用できるようにキャッシュしようとしているので、注釈がマップに表示される前に、取得したリソースを Core Data テーブルに書き込みます。
各場所は、関連するカテゴリ リソースを必要に応じて取得します。場所を「場所」テーブルに、カテゴリを「カテゴリ」テーブルに書き込む必要があります。
フェッチは非同期で行われるため、特定のカテゴリをテーブルに書き込むときに、別の場所の「スレッド」が同じ関連付けられたカテゴリを「カテゴリ」テーブルに書き込もうとしているかどうかはわかりません。
そこで問題は、非同期で取得した情報をコア データ テーブルに入力する必要がある場合に、コア データ テーブルを操作するためのパターンは何かということです。具体的には、カテゴリを書き込もうとしている特定のスレッドが、それを行おうとしているスレッドが既に存在することをどのように知ることができるのでしょうか?
更新 1: 現在の問題は、現在、カテゴリが重複していることです。私の推測では、明らかに、書き込まれようとする各カテゴリは、同じカテゴリの並列書き込みについて認識していません。
更新 2: 私の場合の最も簡単な説明は次のとおりです。
あるスレッドでいくつかのフィールドを持つ新しいカテゴリ エンティティを作成し、その間に別のスレッドで、最初のスレッドと同じカテゴリ オブジェクトを目指して同じフィールドを持つまったく同じカテゴリ エンティティを作成します。
1 つのスレッドが[managedObjectContext save:&error]の呼び出しに勝ちますが、実際のレコードが PersistentStore に表示される前に、2 番目のスレッドも保存を呼び出します。問題は、「カテゴリ」テーブルでレコードの重複を防ぐ方法です。
更新 3: 管理オブジェクト コンテキストを使用する両方のバリアントを検討しています: 1) すべてのスレッドで 1 つの共有 moc インスタンスを再利用する 2) 各スレッドで新しい moc をインスタンス化する
ありがとう!
objective-c - 各スレッドが他のスレッドのデータに関連しないデータを処理できる場合、スレッド間で1つの共有管理対象オブジェクトコンテキストを再利用することは可能ですか?
タイトルの質問の簡単な例:1つのスレッドがPlaceエンティティを準備し、それに対して何らかの処理を行っており(特定のフィールドへの入力とその計算には時間がかかります)、その間にもう1つのスレッドはすでにCategoryエンティティを準備しています。2番目の「Category」スレッドはsave:&errorを使用してCategoryエンティティを永続化するため、処理ジョブが終了していない間も最初のスレッドのPlaceエンティティが保存されます。
私は正しいですか?1つの共有モックを使用した場合に説明されている問題が表示されますか?
ありがとう!
visual-studio-2010 - Qt VS アドインを使用して Visual Studio の Qt プロジェクトに新しい構成を追加するにはどうすればよいですか?
QT Visual-Studio アドインで作成された 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
c++ - 名前空間で型を返すQMLでC++スロットを使用する
最初に、以下はQt 5.0.0ベータ1までは正常に機能しましたが(おそらくベータ2とRCも、わかりません)、Qt5.0.0の最終リリースバージョンでは失敗します。Qt5.0.0の最終リリースバージョンで見られた結果のみを参照したいと思います。したがって、おそらくこれはQt5の最近の変更と関係があります。
C ++側では、名前空間に一連のクラス(QObjectから派生)があります(これはオプションでコンパイラフラグでトリガーされます。クラスは別のライブラリにあり、ライブラリは名前空間の使用をオプションとしてユーザーに任せています。図書館)。ここGameでのクラスは、次のようになります(抜粋):
マクロは、Qtが実行するのと同じように、マクロ名で「QT」が「OAE」に置き換えられるだけで、 ...または何もOAE_BEGIN/END_NAMESPACE展開されません。namespace OAE_NAMESPACE {}<qglobal.h>
以下で、「名前空間を有効にする」と言うときは、マクロを宣言したことを意味します。OAE_NAMESPACEこの場合は、値を使用しますoae。
特に、このクラスのインスタンスと、アプリケーションのユーザーインターフェイスのQML内からPlayer返されたクラスにアクセスします。player()このために、私は次のようにクラスを登録します。
QMLフロントエンドに、QML内Gameで呼び出されるのインスタンスへのポインターを提供します。theGame
QML内では、これを通常どおり使用します。小さな例では、player():のポインタアドレスを出力する必要があります。
を設定したかどうかに応じて、次の結果が得られますOAE_NAMESPACE(ちなみに、ライブラリとそれを使用するアプリケーションの両方に同じ設定を使用しています)。
名前空間を無効にすると、すべてが期待どおりに機能し、QMLによってポインタが出力されます。
/li>名前空間を有効にする場合(および
/li>usingライブラリを使用するC ++コード内であるため、コードをまったく変更しません)、QMLは次の戻り値のタイプを理解できませんGame::player()。の戻りタイプをに変更する
/li>Game::player()とoae::Player*、すべてが再び正常に機能します。
これまでの私の結論はmoc、クラスの周りに配置した名前空間を考慮していないということです。私の最初の推測は次のとおりです。ねえ、moc呼び出し時に名前空間を定義することを知りませんg++。これは、.proファイルで行うことです。
ただし、戻り値のタイプをに変更しOAE_NAMESPACE::Player*ても機能するため、mocはマクロを認識しますが、マクロを展開しないか、名前空間を解析しなくなります。OAE_NAMESPACEOAE_BEGIN/END_NAMESPACE
mocPlayer * Game::player() constメソッドの戻り型を含む次の「stringdata」を生成します。
名前空間を無効にして戻りタイプを使用する場合
/li>Player*:名前空間を有効にしてリターンタイプを使用する場合
/li>Player*:名前空間を有効にしてリターンタイプを使用する場合
/li>OAE_NAMESPACE::Player*:
一方、有効になっている場合は、名前空間でmoc返されるクラス名を先頭に追加します。QMetaObject::className()
私の結論は、QObjectメタメソッドのシグニチャでこれらのタイプを使用する代わりに、書き込むことでこれを修正できるということです。(まあ、より良いマクロがあります)。これはコードではひどいように見えますが、メソッドがすでに名前空間にあるため、私には間違っているように見えるので、より良い解決策はありますか?OAE_NAMESPACE::ClassNameClassNameOAE_PREPEND_NAMESPACE
今はOAE_BEGIN/END_MOC_NAMESPACE(に類似しているQT_BEGIN/END_MOC_NAMESPACE)もあるので、多分私はどこかにそれらが必要ですか?Qtでどこでどのように使用されているかわからないので、Qtと同じオプションの名前空間機能を使用したいので、ライブラリでそれに応じて使用する必要があります。
makefile - moc Makefile ルール
どこを検索しても、この便利なルールが表示され続けます
うまくいきません。Makefile は
コメントされていないコメント行は機能しますが、一般的なルールは機能しません。印刷されNo rule to make target 'moc_file.cpp', needed by 'moc'ない理由や、私が間違っていることについて、誰かが洞察を与えることができますか?
c++ - QtMOCが生成したコードドキュメント
私はQtでユーザーインターフェイスを設計していますが、長寿の理由から、将来のビルドでQtメタオブジェクトコンパイラを使用する必要はありません。MOCが標準のC++コードで特定のマクロを解析し、これらに基づいてC++コードを生成することを私は知っています。
私が知りたいのは、この生成されたコードのドキュメントはどこにあるのかということです。生成されたコードを関連するクラスに直接記述したいと思います。これを行うのは面倒かもしれませんが、Qtが消えてMOCが存在しなくなった場合の問題を回避することで、UIを長期的に安定させることができます。
ありがとう!
編集1: Qtフレームワークに基づかないC ++アプリケーション用に、Visual Studio(Qt Creatorではない)でQtベースのUIを設計しています。パッケージ化される特定のライブラリからリンクされたQtコードを使用して純粋なC++としてビルドできるコードを配布できるようにしたい。Qtがインストールされていないシステムでこのコードをビルドできるようにしたい。したがって、MOCを避けたいという願望。私はそこにいるQtファンを怒らせようとはしていません。Qtは素晴らしいです。ただし、このプロジェクトでは少し違うものが必要なので、「MOCを使うだけ」という提案はまったく役に立ちません。
編集2:私は間違っているときに認めるのに十分な人です。もう少し考えて調査した後、私が計画していたことを試す価値はないことは明らかです。MOCで生成されたコードを保存して配布するだけです。みんな、ありがとう。
core-data - コアデータは、複数の保存でアプリをフリーズします
コアデータにデータを保存する際に問題があります。ボタンをクリックすると、複数の書籍情報をデータベースに保存する必要があります。ボタンをクリックすると、メソッドが呼び出され、本の情報がデータベースに保存されます。最初の 3 回のクリックで書籍情報が保存され、UI も反応します。ボタンを 4 回クリックすると、保存の最後に ui がフリーズします。
コードを以下に示します。
コードがバックグラウンド スレッドにあるため、一時的な MOC を作成し、保存するたびに通知を送信します。
ボタンアプリの4回目のクリックでフリーズします。私はこの時点で立ち往生しています。