2010-02-01 10 views
24

Vì lý do hiệu suất, tôi muốn đặt Thuộc tính được lập chỉ mục cho một số thực thể của tôi. Tôi đã tạo một phiên bản mô hình dữ liệu cốt lõi mới để thực hiện các thay đổi. Dữ liệu lõi phát hiện các thay đổi và di chuyển mô hình của tôi sang phiên bản mới, tuy nhiên, KHÔNG CÓ CHỈ SỐ ĐƯỢC PHÁT HIỆN.Thêm chỉ mục dữ liệu lõi vào các Thuộc tính nhất định qua di chuyển

Nếu tôi tạo lại cơ sở dữ liệu từ đầu, các chỉ mục ở đó. Tôi đã kiểm tra bằng Trình duyệt SQLite cả trên iPhone và trên Trình mô phỏng. Sự cố chỉ xảy ra nếu một cơ sở dữ liệu ở định dạng trước đã có sẵn.

Có cách nào để thêm chỉ mục theo cách thủ công không? Viết một số sql cho điều đó? Hay tôi đang thiếu một cái gì đó? Tôi đã có một số di chuyển quan trọng hơn, không có vấn đề ở đó. Nhưng những chỉ số còn thiếu đang làm tôi thất vọng.

Cảm ơn bạn đã trợ giúp!

+0

tôi có thể đề nghị chấp nhận câu trả lời của Scott không? Nó hoạt động và nó sạch sẽ. –

+0

Chắc chắn, hoàn toàn quên mất điều đó. Cảm ơn, Vincent và thx vì câu trả lời tuyệt vời cho Scott! – steipete

Trả lời

50

Tôi cũng gặp vấn đề tương tự.

Theo Core Data Model Versioning and Data Migration Programming Guide:

quan điểm cốt lõi dữ liệu về versioning là nó chỉ quan tâm đến tính năng của mô hình có ảnh hưởng đến kiên trì.

Chỉ cần thêm chỉ mục vào thuộc tính mô hình hiện tại không tự động kích hoạt di chuyển vì dữ liệu chính không thấy hai lược đồ mô hình của bạn khác nhau (chỉ mục không ảnh hưởng đến sự kiên trì).

Tuy nhiên, bạn có thể làm cho Dữ liệu cốt lõi xem mô hình của mình đang được thay đổi bằng cách thêm Bộ chỉnh sửa băm phiên bản vào thuộc tính mới được lập chỉ mục của bạn. Điều này kích hoạt di chuyển nhẹ để cập nhật cơ sở dữ liệu hiện có của tôi.

+0

Hoạt động, cảm ơn, không rõ ràng để con số :) –

+14

Tuyệt vời. Giải quyết nó cho tôi. Tôi đã phát điên vì dữ liệu lõi chậm và chỉ mục dường như không giúp ích gì! Đối với bất kỳ ai không hiểu chính xác giải pháp trên nghĩa là gì ... hãy tạo phiên bản mô hình mới, nhấp vào thuộc tính bạn muốn thêm chỉ mục, trong chỉ mục đánh dấu cửa sổ thuộc tính, sau đó xem bên dưới để biết "công cụ sửa đổi băm phiên bản" , chỉ cần nhập bất kỳ chuỗi nào như "change1". Sự khác biệt tốc độ là rất lớn –

+0

Khi bạn đã thêm chỉ mục vào thuộc tính và đã nhập một công cụ sửa đổi hàm băm phiên bản, làm cách nào bạn có thể kiểm tra xem các giá trị có đang được lập chỉ mục không? – noRema

0

Bạn đã sử dụng chiến lược di chuyển nào?

Trong XCode, bạn có thể tạo mô hình ánh xạ và xem các thay đổi sẽ xảy ra, bao gồm lập chỉ mục.

Tôi đề nghị đơn giản thêm mô hình lập bản đồ, xác minh các chỉ số thay đổi được quy định và thực hiện chuyển đổi nhẹ tự động:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil]; 
NSPersistentStore *migratedStore = [persistentStoreCoordinator addPersistentStoreWithType:nil configuration:nil URL:storeURL options:options error:&error]; 
migrationWasSuccessful = (migratedStore != nil); 

Điều phối viên cửa hàng liên tục sẽ tự động phát hiện các mô hình lập bản đồ, và sử dụng nó để thực hiện di chuyển. Có vẻ như mô hình phỏng đoán theo thời gian chạy không nhạy cảm với việc áp dụng các chỉ mục cho các thuộc tính thực thể.

+0

tôi quên đề cập đến, các tùy chọn đó đã được bật trong các thử nghiệm của tôi. Tôi đã không thử nghiệm nó mà không có những người, mặc dù ... – steipete