問題タブ [nsmutableset]
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.
objective-c - NSMutableSets でオブジェクトを参照する方法
Obj-C に移植しようとしている小さな C# ライブラリがあります (実際には、それをガイドとして使用して C# コードを書き直しています)。ライブラリの目的は、iOS カレンダー アプリの定期的な予定を生成することです。C# 構造体を Obj-C オブジェクトに移植する際に問題が発生しています。これは、予定情報を保持する構造体の 1 つに対して私が持っているものです。
私が書いたメソッドの 1 つは、日付、一連のスケジュール (C# のポートでもありますstruct
)、および予定のリスト (NSMutableSet
上記の Appointment インターフェイスを含む を使用しています) を受け入れます。予定のメソッドを機能させることができれば、残りを把握できると確信しています (と思います)。に予定を追加するコードは次のNSMutableSet
とおりです。
if
ステートメント でビルド エラーが発生します。
互換性のないタイプ「Schedule *」のパラメーターに「void」を送信しています
これまでに使用したことNSMutableSets
も、C# から移植しようとしたこともありません。ご覧のとおり、C# 構造体の移植に取り組んでいます。セットに関するすべての Apple ドキュメントと、C# と Obj-C の違いを説明するいくつかのドキュメントを読みました。
誰かが私が間違っていることを説明するか、セット内の要素を参照する例を教えてくれる良いドキュメントを教えてもらえますか?
objective-c - NSMutableSet で作成された NSArray のフィールドにアクセスするにはどうすればよいですか?
Scheduleという名前のクラスがあり、その中に 4 つのプロパティがあります。
以前にデータを使用して2つの「Schedule」オブジェクト(テスト用)を作成し、両方をNSMutableSetに配置した別のクラスがあります。これはそのためのコードです:
さて、次のように、NSMutableSet にあるスケジュールを取得して NSArray に入れて作業できるようにする別のクラスがあります。
問題は、 apptStartTimeなどのscheduleList内のフィールドにアクセスできないように見えるため、それを操作できることです (別の日付と比較するなど)。
NSMutableSet を NSArray に入れるよりも、これを行うためのより良い方法はありますか? NSArray の個々のフィールドにアクセスするにはどうすればよいですか?
ios - ReactiveCocoa で NSMutableSet の追加を確認できない
という名前の NSMutableSet プロパティを持つ単純なビュー コントローラーがありますselectedEmails
。でviewDidLoad
空のセットを作成し、変更をサブスクライブします。
次に、デバッグのために、アイテムを のセットに追加しますviewDidAppear:
。ただし、サブスクリプション ブロックは最初の空のセットに対して 1 回だけ起動し、新しく更新されたセットに対しては起動しません。
どうしてこれなの?変更を観察できるように修正するにはどうすればよいですか? 別の質問への回答で、セットを観察することはできず、それを含むクラスのみを観察できることがわかりました。これは、ReactiveCocoa がセットで機能しないことを意味しますか?
objective-c - NSMutableSet の -allObjects はスレッドセーフですか?
NSSet objectEnumeration のドキュメントには次のように書かれています:
このメソッドを NSSet の変更可能なサブクラスで使用する場合、列挙中にコードでセットを変更しないでください。セットを変更する場合は、allObjects メソッドを使用して、セットのメンバーの「スナップショット」を作成します。スナップショットを列挙しますが、元のセットに変更を加えます。
私の質問は次のとおりです: allObjects メソッド自体はスレッドセーフですか?
次のような操作セットを実装しました。
これはすべてうまくいきます。しかし、私はCrashlyticsを介してクラッシュしました。これはまれです(数百分の2)が、そこにあります:
OperationSet は、複数のスレッドからアクセスされます。
どんな助けでも大歓迎です。
編集
allObjects の使用法を教えてくれた dasblinkenlight に感謝します。実装を次のように編集しました。
コードが機能します!これは良い兆候ですが、見直していただけますか?
もう 1 つの質問があります。allObjects を使用する場合とセットのコピーを作成する場合に違いはありますか?
それはこのコードを使用しています:
このコードについて:
ご協力いただきありがとうございます。
objective-c - NSMutableSet セット マイナス セットが機能しない
私は根本的な何かを見逃しているに違いありません.誰かが私にそれを指摘してくれることを願っています.
2 つの NSSet があります。セット A には 40 個の NSNumber 値が含まれ、セット B には 20 個の NSNumber 値が含まれます。セット A には、セット B の 20 個の値すべてと、セットによって共有されていない他の 20 個の値が含まれています。
私がやりたいことは次のとおりです: NSSet *newSet = Set A - Set B, ここで、新しいセットには、セット B に含まれていないセット A からの 20 個の値のみが含まれています。「minusSet」を使用していますが、新しいセットには常に元の値の 40 個すべて。上記の内容が含まれていることを確認するために、各セット A と B の内容をログに記録しました。
これが私のコードです:
1) セット A を作成する (40 個の NSNumber を含む)
2) セット B を作成する (セット A にもある 20 個の NSNumber を含む)
3) セット A からセット B を減算しようとします。
4) 残りのすべてのオブジェクトを新しい配列に追加します。
ただし、threadIdsForMessageFetch には 20 個ではなく 40 個のオブジェクトが含まれています。各セットを印刷すると、次のようになります。
セットA
セットB
新しい配列:
マイナスセットコール前の A と B のカウントは次のとおりです。
ios - NSMutableSet removeObject が期待どおりに機能しない
NSMutableSet
オブジェクトを可変にするオブジェクトを含むを使用しています。NSMutableSet
変異したオブジェクトを削除しようとすると、矛盾が見つかります。
問題を特定するために、問題を説明するための簡単なテストをコーディングしました (存在する場合)。
例 1: 期待どおりに動作する
例 2: 期待どおりに動作しない
例 2に示すように、変更後、参照を検索して取得した後でも削除されませんsurname1
。removeObject
なぜこれが起こっているのですか?可変コンテナーに可変オブジェクトを含めることはできませんか?
含まれているオブジェクトのハッシュをキャッシュするこの投稿を読みましたが、それが問題になる可能性があります。NSSet
もしそうなら、それをきれいにする方法はありますか?代替ソリューションはありますか?
好奇心のために、例 1が機能する理由を教えてください。
アップデート:
Apple の Collection Programming Topicsから:
変更可能なオブジェクトがセットに格納されている場合、オブジェクトのハッシュ メソッドが変更可能なオブジェクトの内部状態に依存してはならず、変更可能なオブジェクトがセット内にある間は変更されるべきではありません。たとえば、変更可能な辞書をセットに入れることができますが、そこにある間は変更してはなりません。(特定のオブジェクトがコレクション内にあるかどうかを知るのは難しい場合があることに注意してください)。
更新 2:
重要: Mac または iOS アプリで実行している場合、例 2は異なるログ出力を返します。
Mac アプリケーションにログインします (期待どおりに動作します)。
iOS アプリケーションにログインします (期待どおりに動作しません)。
更新 3:
例 2と同じコードですが、うまくNSMutableArray
いくようです...NSMutableSet
ハッシュの操作方法を推測します。上記のリンクされたスレッドでコメントされているように、それらをキャッシュしていると思います:
macos - ソートを無効にする方法 - NSMutableSet の allObjects?
私の OSX アプリには、カスタム オブジェクトを含む NSMutableSet があります。カスタム オブジェクト クラスに -isEqual および -hash メソッドを実装して、セットが思い通りに比較できるようにしました。
ただし、セットに新しいオブジェクトを挿入してから -allObjects を呼び出すと、返される配列にはオブジェクトが並べ替えられた順序で含まれています。
順序は、上記の -isEqual メソッドでカスタム オブジェクトの比較に使用しているプロパティの値によって異なります。
私の場合、オブジェクトがセットに追加された順序を保持したいと考えています。
誰もそれを達成する方法の手がかりを持っていますか?
どんな種類の助けも大歓迎です!
ios - 新しく作成した NSSet を保持する
ボタン1とボタン2の2つのボタンがあります。タッチされた対応するボタンごとに NSSet を作成し、ボタン 2 がタッチされたときに set1 の値を表示したい、またはその逆を行いたい。ボタン 1 が押されるとセット 1 のみが印刷され、ボタン 2 が押されるとセット 2 のみが印刷されます。ボタン2が押されたときに表示/使用できるように、ボタン1アクションで作成されたセットを保持するにはどうすればよいですか。私の簡単なコードを見てください
実装では、私は持っています:
ios - isEqualToSet が正しい値を返さない
私はNSArray
整数値を含む2つを持っています。両方の配列から共通の値を取得したいので、これを使用していNSMutableSet
ます。
これが私のコードです
`
`
配列の値は次のとおりです ` array1 ( 2, 3 )
array2 ( 2, 3 )
and values in
NSMutableSet` は
` set1 {( 2, 3 )}
set2 {( 2, 3 )} `
条件と値に従って、コードはif()
条件内の行を実行しません。しかし、ここではif()
条件が間違った値を返します。
また、[set2 intersectSet:set1];
返品set2
は空です。
このコードに何か問題があります。
これを解決するのを手伝ってください。