1

不動産のリストを扱う iOS アプリを作成しています。現在の構造は次のとおりです。

  1. デバイスはサーバーに接続し、サーバー上のすべての現在のレコード ID と各レコードが最後に変更された時刻を含むインデックス ファイルをダウンロードします。

  2. デバイス上の各コア データ レコードがインデックス ファイルと照合され、次のいずれかがチェックされます。a) レコードは最新であり、何も起こりません。b) レコードが古く、デバイスから削除され、サーバーから再ロードされた。c) レコードはインデックス ファイルの一部ではなく、デバイスから削除されます。d) リスト ID を持つデバイスでレコードが見つからず、サーバーからダウンロードされます。

比較するために各レコードのデータのごく一部のみをダウンロードする必要があるため、インデックス ファイルを使用します。

私の問題はこれです。現在、サーバーには約1250のテストレコードがあります。現在のセットアップでは、最初のインデックス チェック ルーチンを完了するのに (WiFi を使用して) ほぼ 3 分かかります。iOS アプリで大量のレコードを処理するためのより良い方法が必要です。コア データのすべてのレコードを前もって読み込もうとするのは間違っていますか?

参考までに、ListingRecord.h を含めます。

@property (nonatomic, retain) NSString * amenitiesText;
@property (nonatomic, retain) NSString * bodyLabel1;
@property (nonatomic, retain) NSString * bodyLabel2;
@property (nonatomic, retain) NSString * bodyLabel3;
@property (nonatomic, retain) NSString * brokerID;
@property (nonatomic, retain) NSString * companyID;
@property (nonatomic, retain) NSDate * dateCreated;
@property (nonatomic, retain) NSString * descriptionText;
@property (nonatomic, retain) NSString * displayPrice;
@property (nonatomic, retain) NSString * featuredListing;
@property (nonatomic, retain) NSString * headerLabel;
@property (nonatomic, retain) NSData * headerPhoto;
@property (nonatomic, retain) NSString * lastUpdate;
@property (nonatomic, retain) NSNumber * latitudeData;
@property (nonatomic, retain) NSNumber * listingID;
@property (nonatomic, retain) NSString * listingType1;
@property (nonatomic, retain) NSString * listingType2;
@property (nonatomic, retain) NSString * listingType3;
@property (nonatomic, retain) NSString * listingType4;
@property (nonatomic, retain) NSString * listingType5;
@property (nonatomic, retain) NSString * listingType6;
@property (nonatomic, retain) NSString * listingType7;
@property (nonatomic, retain) NSString * listingType8;
@property (nonatomic, retain) NSNumber * longitudeData;
@property (nonatomic, retain) NSNumber * numberPrice;
@property (nonatomic, retain) NSData * photo1;
@property (nonatomic, retain) NSData * photo2;
@property (nonatomic, retain) NSData * photo3;
@property (nonatomic, retain) NSData * photo4;
@property (nonatomic, retain) NSData * photo5;
@property (nonatomic, retain) NSString * pinLabel;
@property (nonatomic, retain) NSData * thumbnailPic;
@property (nonatomic, retain) NSString * sessionID;

インデックス ファイルには、listingID と lastUpdate が含まれ、デバイスのコア データ レコードと比較されます。

4

2 に答える 2

2

サーバーとの通信とチェックルーチンの2つのボトルネックがあるようです。最初のボトルネックを解決するために、JSON を強くお勧めします。正しく使用すれば、サーバーからデバイスに渡されるデータのサイズが縮小され、操作が非常に簡単になります。また、サーバーから返されたデータを取得し、それを 1 行のコードで JSON オブジェクト表現に変換するだけで、基本的に値の NSDictionary を処理するため、2 番目のボトルネックであるチェック ルーチンにも役立ちます。

于 2012-10-09T00:37:59.647 に答える
2

これらすべてを一度に行う必要がある場合は、フロー ロジックを調整して、この「初期インデックス チェック ルーチン」をバックグラウンド スレッドで実行できるようにします。

もう 1 つのオプションは、インデックス ファイルをサーバーに送信し、バックエンド サーバーに作業を任せて、追加、削除、更新などのリストのみを返すことです。これは、バックエンド サーバーがこれを実行できるかどうかによって異なります。

于 2012-10-09T01:01:18.540 に答える