0

私はそのように見えるウィンドウを持っています: UI

レコードを追加するたびに、修復IDを、テーブルでまだ使用されていない一意の番号に設定する必要があります。たとえば、ID番号1、2、3がある場合、+を押すと、IDフィールドは「4」に設定されます。また、テーブル内のレコードの1つが削除され、ID番号が1、2、4の場合、+を押すと、レコードIDの番号は3に設定されます。

現在、カスタムのManagedObjectクラスがあり、次のように宣言しています。

-(void)awakeFromInsert {
    [self setValue:[NSDate date] forKey:@"date"];
}

日付を今日の日付に設定するため。

この一意のレコードIDを実装するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

2

純粋な自動インクリメントID(この質問で求められたような)の場合、このメッセージで説明されているようなものが機能する可能性があります。残念ながら、リスト内の削除されたアイテムの空白を埋める値は提供されません。

于 2009-11-10T13:35:27.300 に答える
1

私は以前に日付の数値形式を使用しました(それが実際に一意であることを確認するための簡単なチェックで-つまり、時計が調整されていません)。+ [NSDate timeIntervalSinceReferenceDate]はNSTimeInterval(typedef double)を返します。これは、タイムゾーンや「夏時間」などに依存しないと思います。

先に触れたように、唯一の弱点は時計が調整されていることですが、いつでもそれがユニークであることを確認できます。あなたがリストしたものより多くの要件がある場合は、私に知らせてください。私にはいくつかの自分がいますが、十分な回避策であると私は信じています。

于 2009-11-10T18:53:44.410 に答える
1

少量のレコードの場合は、無料のIDが見つかるまでそれらをループします。私はあなたの言語を知らないので、ここで擬似コード:

int RepairID=1;
While isUsed(RepairID) {
    RepairID=RepairID+1;
}
return RepairID;

多数のレコードの場合、削除されたIDのリストと最高のIDを追跡できます。レコードを追加するときは、削除された最小のIDを選択するか、再利用する削除されたIDが残っていない場合は、最大のID+1を使用します。

于 2009-11-10T19:07:15.920 に答える
1

インターフェイスで配列コントローラーを使用している場合は、そのarrangedObjects配列のcountメソッドを使用してIDを作成できます。-(id)newObjectメソッドをオーバーライドすることで実装できます

//implemented in yourArrayController.m

-(id)newObject
{
//call the super method to return an object of the entity for the array controller
NSManagedObject* yourNewObject = [super newObject]; 

//set the ID the count of the arrangedObjects array
NSNumber* theID = [NSNumber numberWithInteger:[[self arrangedObjects] count]];

[yourNewObject setValue:theID forKey:@"ID"];

//return your new Object 
return yourNewObject;
}
于 2011-06-10T03:55:53.587 に答える