framework中加載資源(CoreData)

一開始項目中使用coredata保存數(shù)據(jù),自己寫了一個單例管理。其中獲取CoreData.momd文件:

- (NSManagedObjectModel *)manageObjectModel {
    if (_manageObjectModel != nil) {
        return _manageObjectModel;
    }
    
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:kDDCoreDataManagerModelName withExtension:@"momd"];
    /*
    if(@available(iOS 11.0, *)){
    } else {
        modelURL = [modelURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mom", kDDCoreDataManagerModelName]];
    }*/
    _manageObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _manageObjectModel;
}

隨后coredata轉(zhuǎn)移到SDK中,打包framework之后直接閃退,定位到_manageObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];意思是modelURL為nil,無法加載空的。
通過和之前的對比,發(fā)現(xiàn)是無法找到CoreData.momd文件,查看.framework內(nèi)容CoreData.momd存在里面。


image.png

剩下的就是從.framework查找CoreData.momd路徑,之前代碼是用mainBundle,此次通過-bundleForClass:方法獲取bundle。代碼更新如下

- (NSManagedObjectModel *)manageObjectModel {
    if (_manageObjectModel != nil) {
        return _manageObjectModel;
    }
    
    //NSURL *modelURL = [[NSBundle mainBundle] URLForResource:kDDCoreDataManagerModelName withExtension:@"momd"];
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSURL *modelURL = [bundle URLForResource:kDDCoreDataManagerModelName withExtension:@"momd"];
    /*
    if(@available(iOS 11.0, *)){
    } else {
        modelURL = [modelURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.mom", kDDCoreDataManagerModelName]];
    }*/
    if (modelURL) {
        _manageObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    }
    return _manageObjectModel;
}

同理獲得其他的資源,只要獲取到bundle就可以讀取了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容