2009-08-12 27 views
7

Tôi đang làm một ứng dụng iPhone. Trong ứng dụng này, tôi chỉ muốn có một cơ sở dữ liệu được sử dụng như một bảng tra cứu các giá trị trong ứng dụng của tôi. Điều duy nhất cơ sở dữ liệu sẽ làm là cung cấp cho tôi các giá trị tôi cần tùy thuộc vào truy vấn của chương trình. Nó sẽ không thực hiện bất kỳ việc thêm hoặc xóa nào trong cơ sở dữ liệu. Câu hỏi của tôi là làm thế nào để tôi khởi tạo một dữ liệu mặc định trên ứng dụng bằng cách sử dụng CoreData. Vì vậy, khi chương trình bắt đầu Nó đã có tất cả các giá trị cần thiết.Làm cách nào để khởi tạo cửa hàng với dữ liệu mặc định trong ứng dụng CoreData?

Nếu bạn có các đề xuất khác về những việc tốt hơn hoặc lựa chọn thay thế khác, vui lòng cho tôi biết.

Cảm ơn.

Trả lời

0

Tôi sẽ viết một công cụ điền vào một cơ sở dữ liệu với dữ liệu bạn muốn, tạo db tại thời gian xây dựng và lưu nó vào thư mục tài nguyên của bạn. Nếu bạn không viết nó, bạn có thể để nó ở đó và truy cập trực tiếp, nếu bạn muốn viết nó, bạn sẽ cần sao chép nó ở đâu đó bạn được phép viết (như thư mục tài liệu).

+0

Đây là câu trả lời khá cũ. Điều này vẫn đúng? Tôi sẽ không viết thư cho cơ sở dữ liệu được chuẩn bị sẵn, tôi có thể đọc trực tiếp từ tài nguyên không? – Suragch

12

Tôi sẽ tạo một ứng dụng Mac đơn giản, bắt đầu từ mẫu cho ứng dụng dựa trên tài liệu Core Data. Sao chép tệp .xcdatamodel hiện có của bạn qua một tệp mặc định trong dự án (hoặc thêm mô hình dữ liệu mới và đảm bảo đổi tên ở bất kỳ đâu có liên quan đến mô hình mặc định). Mở tập tin XIB cho cửa sổ tài liệu trong Interface Builder và kéo mục Core Data Entity vào nó từ thanh tra Library Builder. Từ hộp thoại kết quả, chọn một thực thể để hiển thị và chọn một giao diện để hiển thị nó.

Điều này sẽ tạo ra giao diện đầy đủ chức năng để thêm, xóa hoặc chỉnh sửa các thuộc tính của loại thực thể đó. Tất cả mọi thứ nên được nối qua Cocoa Bindings để bạn không cần phải viết một dòng mã để làm việc này. Bạn có thể thêm giao diện cho mỗi loại thực thể trong mô hình của bạn theo cách này.

Điều này sẽ cho phép bạn nhanh chóng nhập và chỉnh sửa dữ liệu trong tài liệu Dữ liệu cốt lõi, sau đó bạn có thể lưu vào đĩa và thêm làm tài nguyên cho ứng dụng iPhone của mình. Các cấu trúc cơ sở dữ liệu SQLite hoàn toàn tương thích giữa việc triển khai Data Core và iPhone Core Data, vì vậy tôi đã nhận thấy rằng đây là một cách nhanh chóng và dễ dàng để kiểm tra mã Dữ liệu lõi của iPhone của bạn.

+0

@ "BradLarson" Có vẻ như tính năng này ("kéo mục Dữ liệu Thực thể cốt lõi vào chế độ xem") bị ngừng trong XCode4. – Ali

+0

Điều gì sẽ xảy ra khi bạn cần di chuyển cơ sở dữ liệu trên một bản phát hành trong tương lai? Bạn sẽ về cơ bản phải xây dựng lại một cơ sở dữ liệu mặc định cho mọi phiên bản của mô hình? Tôi tò mò nếu nó có thể tốt hơn để cư trú cơ sở dữ liệu trên chạy đầu tiên từ một số danh sách tài sản và tôi rất muốn nhận được lời khuyên của bạn về nó. Cảm ơn Brad! – iwasrobbed

+1

@iWasRobbed - Trong trường hợp đó, bạn cũng sẽ di chuyển cơ sở dữ liệu đi kèm của mình sang phiên bản mới nhất. Bạn muốn tránh lãng phí thời gian nâng cấp cho mọi cài đặt iOS. Máy khách Mac của tôi mà tôi đã xây dựng cho điều này đã có thể cập nhật cơ sở dữ liệu lên lược đồ mới nhất để triển khai trong gói ứng dụng iOS của các phiên bản ứng dụng mới hơn. –

1

Tôi đã cố định bộ não của mình hàng giờ để giải quyết vấn đề này. Những gì tôi đưa ra chỉ đơn giản là không lưu cơ sở dữ liệu. Bằng cách đó, nó sẽ được khởi tạo mỗi khi ứng dụng được mở. Nếu bạn lưu nó, nó sẽ tiếp tục lặp lại.

7

Vui lòng tham khảo Hướng dẫn lập trình Core Data, hoặc xem dưới đây (sao chép từ PG):

" Làm thế nào để khởi tạo một cửa hàng với dữ liệu mặc định

Có hai vấn đề ở đây: tạo dữ liệu, và đảm bảo dữ liệu được nhập khẩu chỉ một lần. có một số cách để tạo ra các dữ liệu.

  • Bạn có thể tạo một cửa hàng khăng khăng riêng biệt có chứa các mặc định dữ liệu và bao gồm cửa hàng dưới dạng tài nguyên ứng dụng. Khi bạn muốn để sử dụng nó, bạn phải sao chép toàn bộ cửa hàng đến vị trí thích hợp hoặc sao chép các đối tượng từ các giá trị mặc định vào một cửa hàng hiện tại . Đối với các tập dữ liệu nhỏ, bạn có thể tạo các đối tượng được quản lý trực tiếp trong mã.

  • Bạn có thể tạo một danh sách-hay tài sản một số tập tin dựa trên đại diện-của dữ liệu, và lưu nó như một nguồn tài nguyên ứng dụng khác. Khi bạn muốn sử dụng nó, bạn phải mở tệp và phân tích biểu diễn để tạo các đối tượng được quản lý.

Bạn không nên sử dụng kỹ thuật này trên iOS và chỉ khi thực sự cần thiết trên Mac OS X. Phân tích tệp để tạo cửa hàng phát sinh chi phí không cần thiết. Tốt hơn hết là bạn nên tự tạo kho lưu trữ dữ liệu lõi và sử dụng nó trực tiếp trong ứng dụng của mình. Ngoài ra còn có một số cách để đảm bảo rằng giá trị mặc định được nhập khẩu một lần duy nhất:

  • Nếu bạn đang sử dụng iOS hoặc tạo ra một ứng dụng không dựa trên tài liệu cho Mac OS X, bạn có thể thêm một kiểm tra về ứng dụng khởi chạy để xác định liệu tệp có tồn tại ở vị trí bạn chỉ định cho cửa hàng của ứng dụng hay không. Nếu không, bạn cần phải nhập dữ liệu. Đối với ví dụ dựa trên iOS, hãy xem CoreDataBooks.

  • Nếu bạn đang tạo một ứng dụng dựa trên tài liệu bằng cách sử dụng NSPersistentDocument, bạn khởi tạo các giá trị mặc định trong initWithType: error :.

  • Nếu có một khả năng rằng các cửa hàng (vì thế tập tin) có thể là tạo nhưng dữ liệu không được nhập, sau đó bạn có thể thêm một siêu dữ liệu cờ đến cửa hàng. Bạn có thể kiểm tra siêu dữ liệu (sử dụng metadataForPersistentStoreWithURL: error :) hiệu quả hơn thực hiện tìm nạp (và nó không yêu cầu bạn phải mã cứng bất kỳ giá trị dữ liệu mặc định).

"

Như đã đề cập ở trên, nhìn chung chúng ta cần tạo một cửa hàng mặc định được phổ biến trước với mã, sau đó sử dụng nó như là một tập tin tài nguyên, và sao chép nó từ bó nguồn tài liệu thư mục nếu Hãy tìm kiếm ví dụ mã CoreDataBooks trong Xcode Organizer (hoặc Trung tâm phát triển của Apple), và xem phương thức persistentStoreCoordinator - (NSPersistentStoreCoordinator *) persistentStoreCoordinator

Các vấn đề liên quan