Dữ liệu cốt lõi - Không tải được mô hình được tối ưu hóa tại đường dẫn


76

Tôi nhận được một số bản in này trong bảng điều khiển của mình trong khi chạy ứng dụng từ Xcode 6 trong iPhone 6 với iOS 9 beta 5:

CoreData: Không tải được mô hình được tối ưu hóa tại đường dẫn '/var/mobile/Containers/Bundle/Application/0000000B-BDBC-0000-000B-0000FB00000B/Distribution.app/database.momd/database.omo'

Tôi không tìm thấy điều gì đó liên quan đến điều này, có ai có chút manh mối về tin nhắn này không?


2
Tôi thấy thông báo tương tự khi sử dụng Xcode 6, nhưng chỉ khi triển khai cho thiết bị hoặc sim iOS 9. Tôi không thấy nó khi chạy bất kỳ iOS nào trên thiết bị hoặc sim khi sử dụng Xcode 7 beta. Vì vậy, do iOS 9 vẫn đang trong giai đoạn thử nghiệm, tôi đoán đó là một lỗi dành riêng cho sự kết hợp Xcode 6 iOS 9. Tôi sẽ bỏ qua nó cho bây giờ. Ứng dụng của tôi làm việc như mong đợi, vì vậy tôi sẽ không dành bất cứ lúc nào nhìn vào điều này cho đến khi tôi thấy các phiên bản ứng cử viên phát hành iOS 9 / Xcode 7.
Tony Adams

6
Tôi cũng nhận được điều này với Xcode 7 GM. Bất kỳ manh mối nào về thông báo lỗi này?
Buju

2
tương tự với xcode 7 & iOS 9
Tatarasanu Victor

1
vấn đề tương tự đang xảy ra đối với GoogleMaps
Nullify

2
Gặp lỗi này trên một dự án mới khi bắt đầu sử dụng xcode 9 (lược đồ gốc được tạo bằng xcode 8).
lal

Câu trả lời:


13

Tôi đã gặp phải vấn đề này và đã tìm hiểu kỹ.

Tôi đã xây dựng với Xcode 6.4 và có vẻ như dữ liệu cốt lõi trước đây chỉ tạo ra một tệp .mom trong thư mục momd MyApp.ipa. Ảnh chụp màn hình này là từ một dự án đã xem một số phiên bản của Xcode.

Lưu ý rằng tất cả các phiên bản mô hình cũ hơn chỉ có một tệp .mom. Tôi vừa tạo một phiên bản kiểu máy mới hôm nay và nó có cả tệp .mom và .omo.

nhập mô tả hình ảnh ở đây

Có vẻ như Xcode 6.4 (và có lẽ cả một số phiên bản beta 7.x) không biết cách tải phiên bản tối ưu hóa của mô hình dữ liệu vì tôi cũng nhận được

2015-10-16 11:11:42.563 MyAppName[1767:599635] CoreData: Failed to load optimized model at path '/var/mobile/Containers/Bundle/Application/D887D60B-FB28-4059-8167-F573460D98F8/MyAppName.app/MyDataModel.momd/MyDataModel3_0Analytics.omo'

cảnh báo khi biên dịch với 6.4. Tuy nhiên, khi biên dịch ứng dụng với phiên bản cửa hàng ứng dụng mới nhất của Xcode (7.0.1), tôi không nhận được cảnh báo đó. Tôi đoán rằng lý do giải pháp của Mahesh hoạt động là do việc viết lại toàn bộ lược đồ sẽ tạo ra tệp .omo mà ứng dụng đang tìm kiếm trong gói ứng dụng.

Giải pháp cho tôi là tạo một phiên bản mô hình dữ liệu mới trong dữ liệu lõi và sau đó xây dựng bằng Xcode 7. Có vẻ như việc tạo một phiên bản mô hình mới sẽ tạo ra tệp mô hình được tối ưu hóa. Mặc dù vậy, trong thử nghiệm của tôi, ngay cả với tệp này được tạo Xcode 6.4 vẫn gây ra lỗi. Cho đến khi tôi thử nó với Xcode 7.0.1 thì cảnh báo mới biến mất.

Đây là suy đoán nhưng tôi nghĩ rằng nếu bạn có một dự án hiện tại và chưa tạo phiên bản mô hình dữ liệu mới và xây dựng bằng Xcode 7 mà tệp .omo bị thiếu, vì vậy nó sẽ đưa ra cảnh báo vì nó không thể tìm thấy tệp. Tuy nhiên, nếu bạn đã tạo phiên bản cho mô hình dữ liệu của mình và xây dựng bằng Xcode 6.4 thì có vẻ như phiên bản Xcode trước đó không hoạt động chính xác với phiên bản được tối ưu hóa và nó không tải ngay cả khi nó ở đó. Đây chỉ là những quan sát của tôi.

Tôi đã xác minh rằng tôi có một mô hình được tối ưu hóa (tệp .omo) để tải bằng cách làm như sau: 1. lưu trữ dự án của bạn 2. thay đổi phần mở rộng .ipa thành .zip 3. mở rộng tệp zip của bạn 4. nhấp vào thư mục "payload" và nhấp chuột phải (hoặc nhấp vào cmd) vào gói ứng dụng trong thư mục và chọn "Hiển thị Nội dung Gói". 5. nhấp vào thư mục .momd, bạn sẽ thấy tất cả các mô hình đối tượng được quản lý có sẵn của bạn ở đó.

Nếu tất cả những gì bạn có là tệp .mom và không có tệp .omo thì cảnh báo hoàn toàn có ý nghĩa, ứng dụng không thể mở tệp không tồn tại.

Trong thử nghiệm của tôi, có vẻ như cảnh báo chỉ mang tính thông tin. Tôi chưa bao giờ bị rơi vì nó. Có vẻ như dữ liệu cốt lõi có thể cố gắng tải mô hình được tối ưu hóa trước và nếu điều đó không thành công thì sẽ quay trở lại mô hình .momd thông thường. Đây chỉ là suy đoán của tôi.

Tôi không chắc liệu mọi thứ ở đây có hoàn toàn chính xác hay không, đây chỉ là những gì tôi đã quan sát được cho đến nay khi cố gắng gỡ lỗi điều này. Nếu ai khác có thể đóng góp thêm thông tin, tôi hoan nghênh ý kiến ​​đóng góp của bạn.


"Trong thử nghiệm của tôi, có vẻ như cảnh báo chỉ mang tính thông tin. Tôi chưa bao giờ gặp sự cố vì nó." Tôi cũng có trải nghiệm tương tự: Tôi nhận được cảnh báo từ Xcode 6, nhưng mọi thứ hoạt động tốt. Tôi hơi sợ khi gửi ứng dụng đến App Store với cảnh báo này vẫn ở đó và tôi không thể tạo nó bằng Xcode 7 ... chúng tôi có chắc đây chỉ là một cảnh báo và sẽ không có sự cố nào xảy ra không?
cdf1982

1
Tôi đã xây dựng bằng Xcode 7 nên tôi không gặp phải lỗi này nữa, nhưng tôi không gặp bất kỳ sự cố nào từ nó trong phiên bản tôi đã xuất xưởng với Xcode 6. Nếu bạn muốn theo dõi bất kỳ sự cố nào xảy ra, tôi khuyên bạn nên khung vải / crashlytics của Twitter.
digitalHound

4

Tôi đã gặp phải vấn đề này sáng nay. Đã thực hiện một hack nhỏ để làm cho nó chạy. Tôi nghĩ rằng nó có liên quan đến việc lập phiên bản không khớp nhưng tôi không chắc.

Nhưng dù sao, nếu bạn đang tải momd-file, chỉ cần thêm "/[filename].mom" vào NSURL để nó hoạt động.

Trong trường hợp của tôi, tôi đang tải tệp Countly.momd và kết thúc việc này:

// Original loading
NSURL modelURL = [[NSBundle bundleForClass:[CountlyDB class]] URLForResource:@"Countly" withExtension:@"momd"];

// Small hack
modelURL = [modelURL URLByAppendingPathComponent:@"Countly.mom"];

Cập nhật: Tôi đang sử dụng POD sử dụng CoreData. Việc xóa nhóm và thêm nguồn, v.v. khỏi repo đã trực tiếp làm cho vấn đề biến mất.

Vì vậy, nó có thể là một vấn đề nhóm.


2
Này - điều này không rõ ràng đối với tôi và có lẽ là rất nhiều độc giả khác. Bạn có thể giải thích quá trình gỡ bỏ pod và thêm nguồn từ repo (lấy nó ở đâu, làm gì, v.v.). Lỗi này là một vấn đề lớn và bài đăng này dường như là thứ duy nhất ở đó bạn đã làm điều gì đó hiệu quả cho bạn. Nếu bạn có thể giải thích, chúng tôi sẽ đánh giá cao nó.
knouben_studdard

9
Đúng vậy. Tôi gặp lỗi khi sử dụng nhóm GoogleMaps và điều này xảy ra - /GoogleMaps.bundle/GMSCacheStorage.momd/Storage.omo '
durazno

bạn có sử dụng MagicalRecord không? Điều này có thể liên quan đến MR + CocoaPods?
Buju

1
Câu trả lời này là SAI. Vấn đề không liên quan gì đến pod. Đừng lãng phí thời gian của bạn để thử cái này!
durazno

1
@ DiAvisoo "hack nhỏ" đã cứu mạng tôi. Tôi không gặp vấn đề về nhóm này mà các bạn đang nói (Tôi đến từ tương lai vào năm 2017). Nhưng tôi đang cố gắng thêm khả năng tương thích ngược trong ứng dụng Core Data được tạo trong Xcode 9 cho ứng dụng iOS 9.3+. Phiên bản 3 nhanh chóng của "vụ hack nhỏ" của DiAvisoo đã giải quyết được vấn đề "lớn" của tôi: {code} let ios9modelURL = modelURL? .AppendingPathComponent ("Countly.mom") {code}.
Rob

3

Tôi đã tìm thấy một giải pháp cho điều này. Tôi đã viết lại toàn bộ lược đồ và khi chạy mã, tôi đã loại bỏ những cảnh báo đó khỏi dữ liệu cốt lõi.

Tôi đề nghị vui lòng sao lưu trước khi bạn thử điều này.

Hy vọng nó sẽ giúp bạn.


1
Có, tôi đã viết lại lược đồ.
Mahesh

9
Xin lỗi nhưng, kế hoạch được viết lại như thế nào?
Markus

3

Sau một thời gian dài tìm kiếm, nó giống như sau:

public lazy var persistentContainer: NSPersistentContainer = {

    var modelURL = Bundle(for: type(of: self)).url(forResource: "Model", withExtension: "momd")!

    // ===> here you append the nameOfVersion.mom you created
    modelURL.appendPathComponent("Model 2.mom")
    let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)
    let container = NSPersistentContainer(name: "ModelFile", managedObjectModel: managedObjectModel!)

    container.persistentStoreDescriptions.first?.shouldInferMappingModelAutomatically = false

 ...

lý do là shouldInferMappingModelAutomatically = falsegì?
spnkr

đó là để di chuyển nếu bạn có nhiều phiên bản của Model. Nếu bạn không sau đó chỉ cần loại bỏ nó
brahimm

0

Tôi muốn trả lời cho những người đã gặp phải vấn đề này khi viết pod riêng có các mô hình CoreData riêng. Có thể, bạn đã đặt định nghĩa mô hình của mình vào gói (điều đó tốt), nhưng bạn tìm kiếm momdtệp trong gói sai.

Giả sử bạn đã xác định gói của mình trong podspec như sau:

'MYPodBundle' => [
    'Model/*.{xcdatamodeld,xcdatamodel}'
]

Sau đó, trước tiên bạn nên tìm gói này, rồi xác định vị trí mô hình của bạn bên trong nó .

NSURL *bundleURL = [[NSBundle bundleForClass:[MYEntity class]] URLForResource:@"MYPodBundle" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
NSString *modelPath = [bundle pathForResource:@"MYCoreDataModel" ofType:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

Vì vậy, bạn có thể tiếp tục tạo ngăn xếp CoreData.

// Điều này có thể hơi sai lệch vì bạn không viết nhóm riêng, nhưng câu trả lời của bạn nằm trên google.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.