日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Core Data 迁移

發布時間:2024/4/15 编程问答 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Core Data 迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此文摘抄自:http://objccn.io/issue-4-7/

?

自定義 Core Data 遷移似乎是一個不太起眼的話題。蘋果在這方面只提供了很少的文檔,若是初次涉足此方面內容,很可能會變成一個可怕的經歷。鑒于客戶端程序的性質,你無法測試你的用戶所生成的數據集的所有可能排列。此外,解決遷移過程中出現的問題會很困難,而因為極有可能你的代碼依賴于最新的數據模型,所以回退并不是一個可選的處理辦法。

在本文中,我們將走一遍搭建自定義 Core Data 遷移的過程,并著重于數據模型的重構。我們將探討從舊模型中提取數據并使用這些數據來填充具有新的實體和關系的目標模型。此外,會有一個包含單元測試的示例項目用于演示兩個自定義遷移。

需要注意的是,如果對數據模型的修改只有增加一個實體或可選屬性,輕量級的遷移是一個很好的選擇。它們非常易于設置,所以本文只會稍稍提及它們。若想知道輕量級遷移的應用場合,請查看官方文檔。

這就是說,如果你需要快速地在你的數據模型上進行相對復雜的改變,那么自定義遷移就是為你準備的。

映射模型 (Mapping Models)

當你要升級你的數據模型到新版,你將先選擇一個基準模型。對于輕量級遷移,持久化存儲會為你自動推斷一個映射模型。然而,如果你對新模型所做的修改并不被輕量級遷移所支持,那么你就需要創建一個映射模型。一個映射模型需要一個源數據模型和一個目標數據模型。?NSMigrationManager?能夠推斷這兩個模型間的映射模型。這使得它很誘人,可用來一路創建每一個以前的模型到最新模型之間的映射模型,但這很快就會變成一團亂麻。對于每一個新版模型,你需要創建的映射模型的量將線性增長。這可能看起來不是個大問題,但隨之而來的是測試這些映射模型的復雜度大大提高了。

想像一下你剛剛部署一個包含版本 3 的數據模型的更新。你的某個用戶已經有一段時間沒有更新你的應用了,這個用戶還在版本 1 的數據模型上。那么現在你就需要一個從版本 1 到版本 3 的映射模型。同時你也需要版本 2 到版本 3 的映射模型。當你添加了版本 4 的數據模型后,那你就需要創建三個新的映射模型。顯然這樣做的擴展性很差,那就來試試漸進式遷移吧。

漸進式遷移 (Progressive Migrations)

與其為每個之前的數據模型到最新的模型間都建立映射模型,還不如在每兩個連續的數據模型之間創建映射模型。以前面的例子來說,版本 1 和版本 2 之間需要一個映射模型,版本 2 和版本 3 之間需要一個映射模型。這樣就可以從版本 1 遷移到版本 2 再遷移到版本 3。顯然,使用這種遷移的方式時,若用戶在較老的版本上遷移過程就會比較慢,但它能節省開發時間并保證健壯性,因為你只需要確保從之前一個模型到新模型的遷移工作正常即可,而更前面的映射模型都已經經過了測試。

總的想法就是手動找出當前版本 v 和版本 v+1 之間的映射模型,在這兩者間遷移,接著繼續遞歸,直到持久化存儲與當前的數據模型兼容。

這一過程看起來像下面這樣(完整版可以在示例項目里找到):

- (BOOL)progressivelyMigrateURL:(NSURL *)sourceStoreURLofType:(NSString *)typetoModel:(NSManagedObjectModel *)finalModelerror:(NSError **)error {NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:type URL:sourceStoreURL error:error]; if (!sourceMetadata) { return NO; } if ([finalModel isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata]) { if (NULL != error) { *error = nil; } return YES; } NSManagedObjectModel *sourceModel = [self sourceModelForSourceMetadata:sourceMetadata]; NSManagedObjectModel *destinationModel = nil; NSMappingModel *mappingModel = nil; NSString *modelName = nil; if (![self getDestinationModel:&destinationModel mappingModel:&mappingModel modelName:&modelName forSourceModel:sourceModel error:error]) { return NO; } // 我們現在有了一個映射模型,開始遷移 NSURL *destinationStoreURL = [self destinationStoreURLWithSourceStoreURL:sourceStoreURL modelName:modelName]; NSMigrationManager *manager = [[NSMigrationManager alloc] initWithSourceModel:sourceModel destinationModel:destinationModel]; if (![manager migrateStoreFromURL:sourceStoreURL type:type options:nil withMappingModel:mappingModel toDestinationURL:destinationStoreURL destinationType:type destinationOptions:nil error:error]) { return NO; } // 現在遷移成功了,把文件備份一下以防不測 if (![self backupSourceStoreAtURL:sourceStoreURL movingDestinationStoreAtURL:destinationStoreURL error:error]) { return NO; } // 現在數據模型可能還不是“最新”版,所以接著遞歸 return [self progressivelyMigrateURL:sourceStoreURL ofType:type toModel:finalModel error:error]; }

這段代碼主要來源于?Marcus Zarra,他寫了一本很棒的關于 Core Data 的書,查看這里。

自 iOS 7 和 OS Mavericks以來,Apple 將 SQLite 的日志模式改寫為預寫式日志 (Write-Ahead Logging), 這意味著數據庫事務都被依附到一個 -wal 文件中。這有可能導致數據丟失和異常。為了數據的安全,我們會將日志模式改寫為回溯模式。而如果我們想要遷移數據(或者為了以后備份),我們可以將一個字典傳遞給?-addPersistentStoreWithType:configuration:URL:options:error:?來完成改寫。

@{ NSSQLitePragmasOption: @{ @"journal_mode": @"DELETE” } }

與?NSPersistentStoreCoordinator?相關的代碼可以在這里找到。

遷移策略

NSEntityMigrationPolicy?是自定義遷移過程的核心。?蘋果的文檔中有這么一句話:?

NSEntityMigrationPolicy?的實例為一個實體映射自定義的遷移策略。

簡單的說,這個類讓我們不僅僅能修改實體的屬性和關系,而且還能任意添加一些自定義的操作來完成每個實體的遷移。

遷移示例

假設我們有一個帶有簡單的數據模型的書籍應用。這個模型有兩個實體:?User?和?Book?。Book?實體有一個屬性叫做?authorName。我們想改善這個模型,添加一個新的實體:?Author。同時我們想為?Book?和?Author?建立一個多對多的關系,因為一本書籍可有多個作者,而一個作者也可寫多本書籍。我們將從?Book?對象里取出?authorName?用于填充一個新的實體并建立關系。

一開始我們要做的是基于第一個數據模型增加一個新版模型。在這個例子里,我們添加了一個?Author?實體,它與?Book?還有多對多的關系。

現在數據模型已經是我們所需要的,但我們還需要遷移所有已存在的數據,這就該?NSEntityMigrationPolicy?出場了。我們創建?NSEntityMigrationPolicy?的一個子類----?MHWBookToBookPolicy?。在映射模型里,我們選擇?Book?實體并設置它作為公共部分(Utilities section)中的自定義策略。

同時我們使用 user info 字典來設置一個?modelVersion?,它將在未來的遷移中派上用場。

在?MHWBookToBookPolicy?中,我們將重載?-createDestinationInstancesForSourceInstance:entityMapping:manager:error:?方法,它允許我們自定義如何遷移每個 Book 實例。如果?modelVersion?的值不是 2,我們將調用父類的實現,否則我們就要做自定義遷移。我們插入基于映射的目標實體的新?NSManagedObject?對象到目標上下文。然后我們遍歷目標實例的屬性鍵值并與來自源實例的值一起填充它們。這將保證我們保留現存數據并避免設置任何我們已經在目標實例中移除的值。

NSNumber *modelVersion = [mapping.userInfo valueForKey:@"modelVersion"]; if (modelVersion.integerValue == 2) { NSMutableArray *sourceKeys = [sourceInstance.entity.attributesByName.allKeys mutableCopy]; NSDictionary *sourceValues = [sourceInstance dictionaryWithValuesForKeys:sourceKeys]; NSManagedObject *destinationInstance = [NSEntityDescription insertNewObjectForEntityForName:mapping.destinationEntityName inManagedObjectContext:manager.destinationContext]; NSArray *destinationKeys = destinationInstance.entity.attributesByName.allKeys; for (NSString *key in destinationKeys) { id value = [sourceValues valueForKey:key]; // 避免value為空 if (value && ![value isEqual:[NSNull null]]) { [destinationInstance setValue:value forKey:key]; } } }

然后我們將基于源實例的值創建一個?Author?實體。但若多本書有同一個作者會發生什么呢?我們將使用?NSMigrationManager的一個 category 方法來創建一個查找字典,確保對于同一個名字的作者,我們只會創建一個?Author。

NSMutableDictionary *authorLookup = [manager lookupWithKey:@"authors"]; // 檢查該作者是否已經被創建了 NSString *authorName = [sourceInstance valueForKey:@"author"]; NSManagedObject *author = [authorLookup valueForKey:authorName]; if (!author) { // 創建作者 // ... // 更新避免重復 [authorLookup setValue:author forKey:authorName]; } [destinationInstance performSelector:@selector(addAuthorsObject:) withObject:author];

最后,我們需要告訴遷移管理器在源存儲與目的存儲之間關聯數據:

[manager associateSourceInstance:sourceInstancewithDestinationInstance:destinationInstanceforEntityMapping:mapping]; return YES;

NSMigrationManager?的 category 方法:

@implementation NSMigrationManager (Lookup)- (NSMutableDictionary *)lookupWithKey:(NSString *)lookupKey { NSMutableDictionary *userInfo = (NSMutableDictionary *)self.userInfo; // 這里檢查一下是否已經建立了 userInfo 的字典 if (!userInfo) { userInfo = [@{} mutableCopy]; self.userInfo = userInfo; } NSMutableDictionary *lookup = [userInfo valueForKey:lookupKey]; if (!lookup) { lookup = [@{} mutableCopy]; [userInfo setValue:lookup forKey:lookupKey]; } return lookup; } @end

一個更復雜的遷移

過了一會,我們又想把?fileURL?這個屬性從?Book?實體里提出來,放入一個叫做?File?的新實體里。同時我們還想修改實體之間的關系,以便?User?可與?File?有一對多的關系,而反過來?File?和?Book?有多對一的關系。

在之前的遷移中,我們只遷移了一個實體。而現在當我們添加了?File?后,事情變得有些復雜了。我們不能簡單地在遷移一個?Book時插入一個?File?實體并設置它與?User?的對應關系,因為此時?User?實體還沒有被遷移,之間的關系也無從談起。我們必須考慮遷移的執行順序。在映射模型中,是可以改變實體映射的順序的。具體到這里的例子,我們想將?UserToUser?映射放在?BookToBook映射之上。這保證了?User?實體會比?Book?實體更早遷移。

添加一個?File?實體的途徑和創建?Author?的過程相似。我們在?MHWBookToBookPolicy?中遷移?Book?實體時創建?File?對象。我們會查看源實例的?User?實體,為每個?User?實體創建一個新的?File?對象,并建立對應關系:

NSArray *users = [sourceInstance valueForKey:@"users"]; for (NSManagedObject *user in users) {NSManagedObject *file = [NSEntityDescription insertNewObjectForEntityForName:@"File" inManagedObjectContext:manager.destinationContext]; [file setValue:[sourceInstance valueForKey:@"fileURL"] forKey:@"fileURL"]; [file setValue:destinationInstance forKey:@"book"]; NSInteger userId = [[user valueForKey:@"userId"] integerValue]; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; request.predicate = [NSPredicate predicateWithFormat:@"userId = %d", userId]; NSManagedObject *user = [[manager.destinationContext executeFetchRequest:request error:nil] lastObject]; [file setValue:user forKey:@"user"]; }

大數據集

如果你的存儲包含了大量數據,以至到達一個臨界點,遷移就會消耗過多內存,Core Data 提供了一個以數據塊(chunks)的方式遷移的辦法。蘋果的文檔有簡要地提到這件事。解決辦法是使用多映射模型分開你的遷移并為每個映射模型遷移一次。這要求你有一個對象圖(object graph),在其中,遷移可被分為兩個或多個部分。為了支持這一點而需要添加的代碼其實很少。

首先,我們更新遷移方法以支持使用多個映射模型來遷移。已知映射模型的順序很重要,我們將通過代理方法請求它們:

NSArray *mappingModels = @[mappingModel]; // 我們之前建立的那個模型 if ([self.delegate respondsToSelector:@selector(migrationManager:mappingModelsForSourceModel:)]) { NSArray *explicitMappingModels = [self.delegate migrationManager:self mappingModelsForSourceModel:sourceModel]; if (0 < explicitMappingModels.count) { mappingModels = explicitMappingModels; } } for (NSMappingModel *mappingModel in mappingModels) { didMigrate = [manager migrateStoreFromURL:sourceStoreURL type:type options:nil withMappingModel:mappingModel toDestinationURL:destinationStoreURL destinationType:type destinationOptions:nil error:error]; }

現在,我們如何知曉哪一個映射模型被用于這個特定的源模型呢?此處的 API 可能顯得有些笨拙,但以下的解決方法確實完成了工作。在代理方法中,我們找出源模型的名字并返回相關的映射模型:

- (NSArray *)migrationManager:(MHWMigrationManager *)migrationManager mappingModelsForSourceModel:(NSManagedObjectModel *)sourceModel {NSMutableArray *mappingModels = [@[] mutableCopy];NSString *modelName = [sourceModel mhw_modelName];if ([modelName isEqual:@"Model2"]) { // 把該映射模型加入數組 } return mappingModels; }

我們將為?NSManagedObjectModel?添加一個 category,以幫助我們找出它的文件名: We’ll add a category on?NSManagedObjectModel?that helps us figure out its filename:

- (NSString *)mhw_modelName {NSString *modelName = nil;NSArray *modelPaths = // get paths to all the mom files in the bundle for (NSString *modelPath in modelPaths) { NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; if ([model isEqual:self]) { modelName = modelURL.lastPathComponent.stringByDeletingPathExtension; break; } } return modelName; }

由于?User?在前面的例子(沒有源關系映射)中被從對象圖中隔離,因此遷移?User?的過程將省事很多。我們將從第一個映射模型中移除?UserToUser?映射,然后創建一個僅有?UserToUser?的映射。不要忘記在映射模型列表中返回新的?User?映射模型,因為我們正在其它映射中設置新關系。

單元測試

為此應用建立單元測試異常簡單:

  • 將相關數據填入舊存儲*。?
  • 將產生的持久性存儲文件復制到你的測試目標。?
  • 編寫測試斷言符合最新的數據模型。?
  • 運行測試,遷移數據到新的數據模型。
  • *這很容易完成,只需在模擬器里運行一下你應用最新的版本(production version)即可

    步驟 1 和 2 很簡單。步驟 3 留給讀者作為練習,然后我會引導你通過第 4 步。?

    當持久化存儲文件被添加到單元測試目標上時,我們需要告知遷移管理器把那個存儲遷移至我們的目標存儲。在示例項目中所示如下:

    - (void)setUpCoreDataStackMigratingFromStoreWithName:(NSString *)name {NSURL *storeURL = [self temporaryRandomURL];[self copyStoreWithName:name toURL:storeURL]; NSURL *momURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; self.managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; NSString *storeType = NSSQLiteStoreType; MHWMigrationManager *migrationManager = [MHWMigrationManager new]; [migrationManager progressivelyMigrateURL:storeURL ofType:storeType toModel:self.managedObjectModel error:nil]; self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel]; [self.persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:nil URL:storeURL options:nil error:nil]; self.managedObjectContext = [[NSManagedObjectContext alloc] init]; self.managedObjectContext.persistentStoreCoordinator = self.persistentStoreCoordinator; } - (NSURL *)temporaryRandomURL { NSString *uniqueName = [NSProcessInfo processInfo].globallyUniqueString; return [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingString:uniqueName]]; } - (void)copyStoreWithName:(NSString *)name toURL:(NSURL *)url { // 每次創建一個唯一的url以保證測試正常運行 NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSFileManager *fileManager = [NSFileManager new]; NSString *path = [bundle pathForResource:[name stringByDeletingPathExtension] ofType:name.pathExtension]; [fileManager copyItemAtPath:path toPath:url.path error:nil]; }

    把下面的代碼放到一個父類,以便于在測試的類中復用:

    - (void)setUp {[super setUp];[self setUpCoreDataStackMigratingFromStoreWithName:@"Model1.sqlite"]; }

    結論

    輕量級遷移是直接在 SQLite 內部發生。這相對于自定義遷移來說非常快速且有效率。自定義遷移要把源對象讀入到內存中,然后拷貝值到目標對象,重新建立關系,最后插入到新的存儲中。這樣做不僅很慢,而且當遷移大數據集時,由于內存大小的限制,它還會引起系統強制回收內存問題。

    添加數據前盡量考慮完全

    在處理任何數據持久性問題時最重要的事情之一就是仔細思考你的模型。我們希望模型是可持續發展的。在最開始創建模型的時候盡量考慮完全。添加空屬性或者空實體也比以后進行遷移時候創建好的多,因為遷移很容易出現錯誤,而未使用的數據就不會了。

    調試遷移

    測試遷移時一個有用的啟動參數是?-com.apple.CoreData.MigrationDebug。設置為 1 時,你會在控制臺收到關于遷移數據時特殊情況的信息。如果你熟悉 SQL 但不了解 Core Data,設置?-com.apple.CoreData.SQLDebug?為 1 可在控制臺看到實際操作的 SQL 語句。

    轉載于:https://www.cnblogs.com/yueyuanyueyuan/p/5647652.html

    總結

    以上是生活随笔為你收集整理的Core Data 迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    www日韩视频 | 日批在线看 | 国产国产人免费人成免费视频 | 不卡的av中文字幕 | 久热国产视频 | 成人av资源站 | 亚洲视频一区二区三区在线观看 | 成人免费观看视频大全 | 久久经典国产视频 | 中文综合在线 | 在线观看的a站 | 一区二区三区中文字幕在线观看 | 日本字幕网 | 久久视频在线观看中文字幕 | 有码中文字幕 | av黄色亚洲 | 久草在线视频免费资源观看 | 欧美污污视频 | 97精品久久人人爽人人爽 | 亚洲一区二区三区91 | 国产伦精品一区二区三区四区视频 | 二区三区在线视频 | 91人人网 | 最新中文字幕在线播放 | 久久激情视频 久久 | 最近高清中文在线字幕在线观看 | 深爱激情五月综合 | 国产午夜精品视频 | 亚洲爱爱视频 | 国产在线精品播放 | 亚洲九九精品 | 99精品久久久 | 黄p在线播放 | 高潮久久久久久久久 | 三上悠亚一区二区在线观看 | 色吊丝在线永久观看最新版本 | 黄色片亚洲 | 日韩欧美在线观看一区二区 | a在线免费观看视频 | 国产精品久久久久一区二区三区共 | 综合色站 | 国产最顶级的黄色片在线免费观看 | 亚洲综合在线五月 | 久久综合久久综合九色 | 夜夜操综合网 | 国产中文欧美日韩在线 | 国产精品69久久久久 | 欧美性生活小视频 | 成人理论在线观看 | 精品国产成人av | 久久女同性恋中文字幕 | 五月花激情 | 久久久久久久亚洲精品 | 福利视频 | 99精品亚洲 | 亚洲激情婷婷 | 亚洲免费精品一区二区 | 国产成人av网 | 九九免费观看视频 | 免费情缘| 91成熟丰满女人少妇 | 国产成人性色生活片 | 国产成人久久久久 | 久久精品一二三区白丝高潮 | 日批在线看| 久久人人爽人人片av | 成人免费观看在线视频 | 亚洲免费观看在线视频 | 亚洲欧美国内爽妇网 | 亚洲综合丁香 | 正在播放国产一区二区 | 国产视频一二区 | 亚洲国产精品视频 | 国产一级特黄电影 | 国产 欧美 日产久久 | 毛片黄色一级 | 九九免费观看视频 | 91在线小视频 | 欧美a级在线播放 | 久久手机免费视频 | 一区二区三区国产精品 | 国产麻豆精品久久一二三 | 99精品免费在线观看 | 亚洲精品videossex少妇 | 国产裸体视频bbbbb | 欧美黑人性猛交 | 91日韩在线专区 | 午夜在线日韩 | 九九热在线播放 | 香蕉视频在线看 | 免费在线国产 | 一区二区三区国 | 精品一区二区亚洲 | 日韩av片无码一区二区不卡电影 | 日韩在线不卡av | 亚洲国产午夜精品 | 日韩免费一区二区在线观看 | 国产婷婷久久 | 欧美精品二区 | 亚洲高清在线精品 | 国产日产欧美在线观看 | 亚洲成年人在线播放 | av网址最新 | 亚洲激情校园春色 | 久久综合久久88 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 欧美日韩高清免费 | 国产高清在线免费 | 国产免费人人看 | 99久久国产免费,99久久国产免费大片 | 一级黄色片毛片 | 欧美日韩国语 | av大全在线观看 | 99久久99久久精品国产片果冰 | 日韩免费网站 | a级片网站| 天天操天天干天天爱 | 欧美一区三区四区 | 在线观看视频福利 | 国产精品露脸在线 | 久久99中文字幕 | 国产精品一区免费看8c0m | 精品在线不卡 | 国产精品资源在线观看 | 久久久www成人免费精品张筱雨 | 国产黄色片免费 | 免费网站v| 激情久久影院 | 特黄色大片 | 久久99精品波多结衣一区 | 欧美日韩性视频在线 | 国产一线二线三线在线观看 | 亚洲中字幕 | 亚洲三级视频 | 国产美女在线免费观看 | 国产精品国产亚洲精品看不卡15 | 日韩三级久久 | 亚州激情视频 | 亚洲高清视频一区二区三区 | 在线观看亚洲专区 | 国产99久| 九色在线视频 | av线上免费看| 国产在线国产 | 免费在线观看一区二区三区 | 免费av电影网站 | 丁香资源影视免费观看 | 国产精品18久久久久久久久 | www.黄色小说.com | 美女在线观看网站 | 色多视频在线观看 | 免费a v视频 | 久久久久久免费网 | 亚洲国产精品成人女人久久 | 国产对白av | 欧美国产日韩在线视频 | 婷婷久久一区二区三区 | av三级在线播放 | 日韩av偷拍| 在线观看国产区 | 日韩欧美69 | 久久精品国产精品亚洲精品 | 国产一级黄大片 | 激情av一区二区 | 日韩午夜视频在线观看 | 中文字幕一区二区三区四区久久 | 国产黄色精品在线 | 欧美超碰在线 | 超级碰碰碰免费视频 | 天天综合天天做天天综合 | 91精品国产92久久久久 | 日本中文字幕视频 | 午夜视频在线观看一区二区三区 | av一级黄| 国产成人精品日本亚洲999 | 亚洲午夜电影网 | 欧美精品乱码久久久久久按摩 | 久黄色| 91麻豆福利| 超碰人人av | 91入口在线观看 | 91视频-88av| 日日爱av | 国产精品久久久久久久毛片 | av成人免费在线看 | 亚洲天堂网在线播放 | 久久99国产精品 | 久久免费看av | 色就是色综合 | 亚洲国产中文字幕在线视频综合 | 中文字幕永久在线 | 亚洲国产手机在线 | 黄色免费网站大全 | 麻花豆传媒mv在线观看网站 | 中文字幕乱码电影 | 91在线视频精品 | 视频福利在线观看 | av中文在线| 91av观看| 国产精品久久久久影视 | 激情婷婷在线 | 成人免费在线观看av | 国产高清在线看 | 欧美日韩在线视频观看 | 色狠狠干| 色婷婷激情电影 | 日日干 天天干 | 久久国产美女视频 | 亚洲国产精品激情在线观看 | 亚洲精品系列 | 又黄又刺激的网站 | 精品人妖videos欧美人妖 | 91激情小视频 | 在线精品国产 | 精品在线二区 | 五月天激情综合网 | 日韩av播放在线 | 免费在线电影网址大全 | 91视频免费播放 | 精品国产观看 | 亚洲精品美女在线 | 日韩一二三 | 成人免费在线视频观看 | 91视频麻豆 | 国产一区成人在线 | 国产中文字幕在线观看 | 人人讲下载 | 夜夜操天天干, | 99久久er热在这里只有精品66 | 一级片免费观看视频 | 久久精品亚洲综合专区 | 91视频高清免费 | 亚洲精品资源在线 | 国产一区在线视频观看 | 久久午夜影院 | 91久草视频| 992tv在线观看 | 综合五月| 91爱爱免费观看 | www麻豆视频| 最新av电影网站 | 男女全黄一级一级高潮免费看 | 天天操天天操天天操天天操天天操天天操 | 成人三级视频 | 夜夜操天天摸 | 午夜婷婷综合 | 91精品视屏 | 在线国产专区 | 中文字幕av在线电影 | 欧美专区日韩专区 | 欧美激精品 | 成人午夜黄色影院 | 国产视频一区二区在线播放 | 亚洲狠狠干 | 久久国产精品视频观看 | 久久免费视频在线观看 | 天天天干夜夜夜操 | 亚洲国产网站 | 日韩免费一二三区 | 97超碰人人网 | 97超碰福利久久精品 | 国产精品白浆视频 | 久久综合福利 | 亚洲精品网站 | 夜夜操天天 | 在线观看完整版 | 在线看av的网址 | 日韩欧美在线观看一区二区 | 久久久黄色免费网站 | 成人免费观看在线视频 | 久久国产精品色av免费看 | 色婷av | 在线观看视频国产 | 天天色播 | 免费男女羞羞的视频网站中文字幕 | 九九精品久久久 | 91精品视频免费 | 久久国产精品99精国产 | 亚洲精品999 | 国产精品久久久久久久久搜平片 | 18女毛片 | 国产精品视频 | 97av视频| 久久国产麻豆 | 精品一区二区三区香蕉蜜桃 | 在线电影av | 国产视频精品免费 | 国产一区成人 | 成人午夜电影在线 | 国产超碰97 | 亚洲 欧美 另类人妖 | 97在线视频免费观看 | 久久色中文字幕 | 一级性av| 成人97视频 | 亚洲免费一级电影 | 啪一啪在线 | av成人动漫在线观看 | 国产成人高清av | 久久亚洲国产精品 | 色婷婷亚洲婷婷 | 亚洲极色 | 欧美一区二区三区在线 | av在线网站免费观看 | 日本99精品| 永久中文字幕 | 婷婷六月色 | 免费网站黄色 | 中文字幕国产精品一区二区 | 欧美9999 | 亚洲国产精品成人女人久久 | 国内精品久久久久久久久久久 | 国产精品免费看久久久8精臀av | 亚洲日本欧美 | 婷婷久久丁香 | 四虎在线视频 | 日韩在线免费高清视频 | 中文字幕色婷婷在线视频 | 久久这里精品视频 | 永久免费在线 | 99热这里是精品 | 黄色一二级片 | 国产精品久久久毛片 | 粉嫩av一区二区三区入口 | 日韩精品首页 | 国产成人在线网站 | 2019中文字幕第一页 | 色狠狠综合天天综合综合 | 欧美激情第十页 | 91精品国产乱码久久桃 | 99精品国产aⅴ | 久久撸在线视频 | 久久久免费在线观看 | 天天爽天天做 | 99视频在线精品 | 国产日韩在线视频 | 久久精品网站视频 | 天天艹天天干天天 | 免费a v在线 | 日日躁你夜夜躁你av蜜 | 免费日韩 精品中文字幕视频在线 | www.大网伊人| 精品视频一区在线观看 | 91香蕉久久 | 午夜日b视频 | 波多野结衣理论片 | 国产一区在线看 | 国产精品自产拍在线观看 | 欧美永久视频 | 亚洲精品动漫在线 | 在线91网| 国产精品毛片久久久久久久久久99999999 | 欧美精品久久久久久久久久丰满 | 五月天.com| 久久五月网 | 高清国产午夜精品久久久久久 | 日韩专区中文字幕 | 日韩超碰在线 | 久久久999| 狠狠狠狠狠狠狠干 | 在线观看av免费 | 欧美精品国产综合久久 | 色婷婷av一区二 | 国产手机在线精品 | 精品美女在线视频 | 91精品日韩 | 麻豆国产精品永久免费视频 | 国产精品久久久久久久久软件 | 午夜久久影视 | 国产亚洲va综合人人澡精品 | 婷婷久久五月 | 亚洲天堂网在线视频 | 97超碰超碰久久福利超碰 | 99国产一区二区三精品乱码 | av超碰在线 | 日韩一区二区免费在线观看 | 亚洲首页 | 在线免费黄网站 | 成年人在线免费看片 | av中文字幕剧情 | 在线观看中文字幕一区二区 | 最近中文字幕在线播放 | 亚洲精品国产精品久久99 | 91中文在线观看 | 国产精品视频地址 | 欧美日韩在线观看不卡 | 一本一道久久a久久精品蜜桃 | 99精品在线看 | 精品在线播放视频 | 国产资源在线观看 | 18国产精品福利片久久婷 | www.狠狠操.com | 日韩高清在线一区二区 | 欧美日韩在线视频观看 | 国产老太婆免费交性大片 | 日韩黄视频 | 亚洲第五色综合网 | 亚洲精品激情 | 国内精品久久久久影院男同志 | 亚洲精品小视频在线观看 | 成人亚洲精品久久久久 | 亚洲视频456 | 精品视频国产 | 成人h在线| 国产精品久久久久久模特 | 一级黄色a视频 | 人人舔人人射 | 91成人精品国产刺激国语对白 | 国产一级免费观看视频 | 热久久电影 | 亚洲一区二区三区毛片 | 中文视频一区二区 | 精品国产人成亚洲区 | 国产精品久久久久久模特 | 97精品国自产拍在线观看 | 激情在线网 | 精品久久久久久久久中文字幕 | 亚洲91精品在线观看 | 亚洲欧美日韩国产一区二区 | 久久视频免费观看 | 久久精品美女视频 | 久久久免费少妇 | 视频国产一区二区三区 | 天天干天天拍 | 欧美精品久久人人躁人人爽 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产淫a| 天天干夜夜干 | 人人草天天草 | 天天色天天爱天天射综合 | 国产黄视频在线观看 | 福利久久| 国产福利av | 91久久精品日日躁夜夜躁国产 | 一级片黄色片网站 | 国产精品久久久久久电影 | 97超碰成人在线 | 国产视频 亚洲精品 | 黄色成人在线观看 | 在线色亚洲 | 国产亚洲精品成人 | 西西www4444大胆在线 | 亚洲欧美国产精品va在线观看 | 亚洲国产精品久久久 | 99热精品在线| 久草在线视频免费资源观看 | 国产免费国产 | 韩国av免费看 | 国产精品99精品久久免费 | 亚洲欧洲精品一区二区精品久久久 | 免费一级片在线观看 | 成人国产一区 | 最新午夜电影 | 亚洲国产剧情 | 狠狠色2019综合网 | 亚洲成人av电影在线 | 国产亚洲综合精品 | 中文字幕日韩国产 | 不卡av免费在线观看 | 国产黑丝一区二区三区 | 久久久久久久久久久久久国产精品 | 亚洲 欧美 综合 在线 精品 | 97视频在线免费观看 | av在线短片| 毛片1000部免费看 | 日韩最新av在线 | 国产一区私人高清影院 | 天天色棕合合合合合合 | 国产一区二区视频在线 | 国产精品美女在线观看 | 国产中出在线观看 | 黄色aa久久| 97人人模人人爽人人喊中文字 | 99精品国产成人一区二区 | 99久久www免费 | 曰韩精品 | 国产呻吟在线 | av中文字幕第一页 | 欧美性色黄大片在线观看 | 亚洲国产成人在线观看 | 国产亚洲精品久久久久久电影 | 久久午夜电影 | 亚洲成人av电影在线 | 精品国产91亚洲一区二区三区www | 国产不卡精品视频 | 97在线影视 | 色黄久久久久久 | 麻豆系列在线观看 | av中文字幕亚洲 | 久久精品久久99精品久久 | 97免费中文视频在线观看 | 色网站视频 | 欧美做受高潮电影o | 国产黄色观看 | 成人91视频| 超碰com| 狠狠干中文字幕 | 在线观看亚洲视频 | 99视频网址| 美女视频一区二区 | 中文字幕黄网 | 成人黄色免费在线观看 | 国产精品18毛片一区二区 | 欧美一进一出抽搐大尺度视频 | 日本中文字幕观看 | 欧美精品999 | 日韩黄色免费电影 | 欧美另类亚洲 | 91在线观看高清 | 香蕉影视app | 国产精品视频免费看 | 欧美久久久久久久 | 成人免费在线播放视频 | 黄p在线播放 | 国产在线小视频 | 一本大道久久精品懂色aⅴ 五月婷社区 | 一区二区在线电影 | 国产精品成人自产拍在线观看 | 热re99久久精品国产66热 | 91日韩在线专区 | 欧美视频日韩视频 | 91中文字幕在线视频 | 亚洲国产成人在线观看 | 欧美日韩精品在线免费观看 | 丁香婷婷激情啪啪 | 国产高清一级 | 色综合天天在线 | 国产亚洲亚洲 | 国产原创在线观看 | 黄色精品在线看 | 欧美天堂视频在线 | 国产视频在线免费 | 福利视频区 | 久久综合九色综合97_ 久久久 | 不卡av电影在线观看 | 免费十分钟 | 在线免费观看一区二区三区 | 能在线观看的日韩av | 国产剧情一区二区在线观看 | 欧美天天射 | 久久婷婷一区二区三区 | 精品国产1区2区3区 国产欧美精品在线观看 | 欧美性生活久久 | 久久精品国产亚洲aⅴ | 精品国产乱码久久久久久天美 | 在线观看911视频 | 日韩天堂网 | 中文字幕视频一区二区 | 一区二区国产精品 | 日韩精品一区二区在线 | 久久久精华网 | 日本精品一区二区三区在线播放视频 | 日本不卡久久 | 国产成a人亚洲精v品在线观看 | 91精品在线观看入口 | 中文字幕资源网 | 丁香高清视频在线看看 | 国产美女免费看 | 免费观看国产成人 | 国产一区二区日本 | 日本精品一区二区在线观看 | 国产精品一区二区三区在线免费观看 | 国产伦精品一区二区三区高清 | 日韩高清免费在线观看 | 91传媒激情理伦片 | 色资源中文字幕 | 夜夜骑首页 | 久久99中文字幕 | 在线国产福利 | 久久久www成人免费精品张筱雨 | 国产精品一区二区在线观看 | 九草视频在线观看 | 免费福利影院 | 久久免费视频这里只有精品 | 福利视频 | 日日夜夜添 | 亚洲一区二区高潮无套美女 | 2022久久国产露脸精品国产 | 波多野结衣一区三区 | www天天操| 日韩在线电影一区二区 | 欧美色伊人 | 国产精品久久久久久久久久 | 黄色电影小说 | 久久免费视频一区 | 婷婷丁香av | 亚洲一二三在线 | 久久大香线蕉app | 天天草天天干天天射 | 亚洲网站在线看 | 欧美极品在线播放 | 91视频一8mav | 久久一区精品 | 日韩中文幕 | adc在线观看 | av网址最新| 99精品99| 黄色亚洲大片免费在线观看 | 91亚洲精品国产 | 欧美另类巨大 | 日韩电影久久 | 男女精品久久 | 国产成人精品999在线观看 | 亚洲免费不卡 | 精品一区二区三区四区在线 | 月下香电影 | 欧美久久九九 | 午夜男人影院 | 99爱视频在线观看 | 精品在线观看免费 | 久草视频在线免费 | 91精品国产92久久久久 | 九九热免费在线观看 | 成人久久精品视频 | 国产综合在线观看视频 | 国产精品久久久久久一区二区 | 日韩欧美一区二区在线播放 | 久久久久久久久久久国产精品 | 日韩性片| 中文在线字幕免费观看 | 99久热精品| 国产麻豆精品95视频 | 国产精品2019 | 在线91视频| 免费av观看| 亚洲少妇久久 | 欧美在线观看视频一区二区 | 日韩精品短视频 | 韩日精品在线观看 | 日韩,中文字幕 | 欧美色一色| 99久久精品免费看国产四区 | 欧美一级久久久久 | 人人插人人玩 | 日韩免费观看高清 | 国产品久精国精产拍 | 91精品免费在线视频 | 日日夜夜狠狠干 | 日韩av中文在线 | 99riav1国产精品视频 | 国产午夜三级一区二区三桃花影视 | 国产 日韩 欧美 中文 在线播放 | 丁香婷婷色月天 | 亚洲一区日韩精品 | 99这里只有| 日韩一区正在播放 | 激情狠狠干 | 99视频偷窥在线精品国自产拍 | 亚洲经典中文字幕 | 成人免费电影 | 日日爱影视 | 97视频免费观看2区 亚洲视屏 | 精品久久久久久久久亚洲 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 亚洲国产精品电影 | 日韩成片 | 九九热久久免费视频 | 国产高清视频在线播放一区 | 欧美一二三区在线观看 | 韩国精品视频在线观看 | 一级片免费观看 | 日韩在线观看影院 | 97网| 午夜精品av在线 | 亚洲,国产成人av | 日韩在线视频免费观看 | 欧美日韩在线第一页 | 五月综合网 | 亚洲精品影院在线观看 | 色视频 在线 | 欧美在线视频一区二区三区 | 日韩精品免费在线 | 免费av网站在线看 | 狠狠躁夜夜a产精品视频 | 国产免费视频一区二区裸体 | 国产中文字幕视频 | 国产精品久久久久av免费 | 97视频人人免费看 | 成人在线播放网站 | 夜夜骑天天操 | 国产区精品在线观看 | 色婷av| 天天爱综合 | 免费日韩电影 | 美女国内精品自产拍在线播放 | 国产精品视频最多的网站 | 激情欧美日韩一区二区 | 中文字幕电影在线 | 热re99久久精品国产66热 | 色综合久久久久久久久五月 | 国产精品久久久久久久久软件 | 日韩性久久 | 91精品久久久久 | 中文av在线免费观看 | 一区在线免费观看 | 中文字幕成人在线观看 | 久草久草久草久草 | 天干啦夜天干天干在线线 | 韩日三级av| 国产精品国产自产拍高清av | 国产四虎在线 | 久久精品一级片 | 精品在线观看一区二区 | 日韩精品中文字幕在线 | 狠狠躁日日躁夜夜躁av | 免费视频色 | 色综合婷婷 | 色婷婷狠狠五月综合天色拍 | 欧美日韩后 | 91人人爽人人爽人人精88v | 欧美色综合天天久久综合精品 | 色妞久久福利网 | 欧美调教网站 | 国产免费不卡av | 日韩午夜av电影 | 欧美一区免费在线观看 | 超碰在线成人 | 一区二区三区动漫 | 99热最新精品| 九九热免费在线视频 | 日韩高清免费在线 | 6080yy精品一区二区三区 | 国产色视频一区 | 日韩欧三级 | 欧美a级一区二区 | 亚洲成人av电影 | 中文字幕在线观看视频一区二区三区 | 免费亚洲视频 | 日本三级吹潮在线 | 欧美一级久久 | 日韩高清av在线 | 在线观av | 国产高清网站 | 五月天婷亚洲天综合网精品偷 | 午夜久久影院 | 香蕉在线影院 | 三级视频日韩 | 亚洲综合在线五月 | 久久亚洲免费 | 日本久久免费电影 | 色综合中文字幕 | 色免费在线| 国产一区在线看 | 一区二区三区动漫 | 日韩在线观看 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 成人午夜剧场在线观看 | 手机看国产毛片 | 亚洲日本三级 | 日韩亚洲国产中文字幕 | 精品视频免费播放 | 国产成人免费观看久久久 | 97超碰中文字幕 | 999一区二区三区 | 最新av网址在线观看 | 麻豆极品 | 丁香六月激情 | 欧美韩国日本在线观看 | 久久优 | www.xxxx变态.com | 一区二区三区 中文字幕 | 在线观看日韩国产 | 日韩三级精品 | 日韩电影黄色 | 亚洲综合色站 | 在线观看激情av | 久久激五月天综合精品 | 免费看片在线观看 | 久久天天躁狠狠躁亚洲综合公司 | 欧美a级片网站 | 亚洲午夜久久久久久久久电影网 | 亚洲精品观看 | 欧美黑吊大战白妞欧美 | 人人爽人人爽人人爽学生一级 | 成人午夜网 | 久久免费视频在线观看30 | 欧美日韩午夜爽爽 | 国产一区二区三区在线 | 国产美女在线精品免费观看 | 久久久久久久久久久网站 | 国产一区网址 | 国产精品1区2区3区 久久免费视频7 | 久久视频国产 | 国产一级免费在线 | 麻豆国产网站 | 免费在线观看av网站 | 中文字幕在线观看完整版电影 | av一级一片| 97在线观看免费观看 | 日本精品视频一区 | 91精品国产成人观看 | 欧美极品xxx | 毛片激情永久免费 | 国产高清视频免费观看 | 日韩理论电影在线观看 | 激情视频免费在线观看 | 国产中文字幕网 | 欧美日韩在线第一页 | 五月色综合 | 国产日韩中文在线 | 午夜免费视频网站 | 欧美日韩p片 | 91尤物国产尤物福利在线播放 | 91精品啪 | 欧美日韩一区二区三区不卡 | 欧美一区二区三区在线 | 久久国产精品99久久久久久进口 | 99久久久久久国产精品 | 中文字幕在线网址 | 黄色91在线 | 91.dizhi永久地址最新 | 91av手机在线观看 | 久草在线视频新 | 日p在线观看 | 日韩精品久久一区二区 | 国产精品18久久久久久不卡孕妇 | 91成人在线观看喷潮 | 色妞色视频一区二区三区四区 | 国产色中涩 | 亚洲欧美国产精品 | 日韩69视频 | 在线观看片 | 日韩av在线不卡 | 久操久| 欧美一区二区三区免费观看 | 国内久久视频 | 亚洲综合狠狠干 | 国产精品破处视频 | 99久久精品国 | 激情电影在线观看 | 特黄色大片 | www激情久久 | 欧美午夜理伦三级在线观看 | 久久国产片 | 欧美日韩国产二区 | 国产精品18videosex性欧美 | 婷婷九月丁香 | 波多野结衣在线中文字幕 | 欧美大片在线看免费观看 | 欧美激情va永久在线播放 | 岛国大片免费视频 | 国产亚洲精品美女久久 | 欧美aaa一级 | 成人在线视频论坛 | 欧美精品久久天天躁 | 久久视频99 | 97电影院在线观看 | 精品国产一区二区三区久久久久久 | 午夜黄网 | 亚洲精品黄网站 | 亚洲国产欧美一区二区三区丁香婷 | 国产精品成人免费一区久久羞羞 | a√国产免费a | 黄色99视频| 亚洲天堂精品视频 | 久草视频免费看 | 日本精品久久久久影院 | 久久精品欧美日韩精品 | 97人人艹| 国产自在线 | 日本精品视频在线播放 | 一区二区三区精品在线视频 | 久久综合久久久久88 | 四虎www| 日韩三级视频在线观看 | 久久国产精品精品国产色婷婷 | 亚洲精品乱码久久 | 日日日日 | 亚洲精品日韩av | 在线视频日韩欧美 | 黄色一级在线免费观看 | 98超碰人人 | 国产第一福利网 | 国产成人一区二区三区久久精品 | 亚洲精选视频在线 | 天天操综 | 日韩在线视频精品 | 日本午夜在线观看 | 国产精品一区二区三区在线 | 欧美日韩久久久 | 日日操日日干 | 久久天天躁 | 日日操天天操夜夜操 | 夜色资源站wwwcom | 久久精品女人毛片国产 | 久久久久久国产一区二区三区 | 蜜桃视频成人在线观看 | 91成人免费 | 欧美一区二区三区免费观看 | 中文字幕在线久一本久 | 18国产精品白浆在线观看免费 | 中文一区在线观看 | 国产尤物视频在线 | 久久久久这里只有精品 | av黄色免费在线观看 | 精品久久久久一区二区国产 | www.日日操.com| 我要看黄色一级片 | 久久久久婷 | 久久激情视频 | 中文字幕刺激在线 | 成人av在线影视 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久人人爽人人片av | 婷婷色社区 | 国产永久免费 | 久久久久久久av麻豆果冻 | 99热精品国产一区二区在线观看 | 国产色视频123区 | 国产一级精品视频 | 丰满少妇在线观看资源站 | 国产手机视频在线 | 中中文字幕av在线 | 欧美激情奇米色 | 亚洲激情 欧美激情 | 这里有精品在线视频 | 成人久久精品视频 | 四虎5151久久欧美毛片 | 美女久久久久久久久久久 | 久久系列| 成年人在线观看视频免费 | 久久最新网址 | 91爱爱网址| 久久久久久久久久久久久久电影 | 欧美日韩性视频在线 | 99视频一区 | 欧美国产91 | 97精品在线视频 | 黄色国产精品 | 中文字幕视频三区 | 日本中文字幕在线视频 | 中文字幕在线观 | 91九色丨porny丨丰满6 | 国产探花在线看 | 久久爱资源网 | 久草视频在线新免费 | 天天拍天天色 | 国产精品久久久久一区二区三区共 | 成人精品999| 国产午夜亚洲精品 | 日本精品视频在线播放 | 日本黄色黄网站 | 成人一区影院 | 国产激情小视频在线观看 | 4p变态网欧美系列 | 国内久久视频 | 91av视频导航 | 亚洲国产精品久久 | 国产91精品看黄网站 | 99热精品视 | 日本性动态图 | 欧美一二区视频 | 久久久亚洲精品 | 人人爽人人爽人人爽人人爽 | 日韩免费一二三区 | 国产精品99久久久精品 | 成人黄色电影在线观看 | 五月婷婷,六月丁香 | 97超碰在线免费观看 | 成人黄大片视频在线观看 | 狠狠色狠狠色综合日日92 | 欧美成人区 | 蜜臀久久99精品久久久久久网站 | 久久久国产精品一区二区三区 | 亚洲成人精品 | 91久久精品日日躁夜夜躁国产 | 一区二区三区在线视频观看58 | 亚洲精区二区三区四区麻豆 | 黄色福利视频网站 | 欧美va天堂va视频va在线 | 成年人国产视频 | 色婷婷久久一区二区 | 草久在线视频 | 国产高清不卡 | 日韩欧美精品一区二区三区经典 | 精品久久久久久久久久国产 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 色美女在线 | 精品96久久久久久中文字幕无 | 国产丝袜美腿在线 | 亚洲九九九在线观看 | 黄色大片日本免费大片 | 色资源网在线观看 | 人人盈棋牌 | www.操.com| 国产精品久免费的黄网站 | 一本一本久久aa综合精品 | 91精彩视频 | 国产一区二区在线播放视频 | 国产精品一区二区免费在线观看 | 午夜狠狠干 | 欧美另类tv | 99精品国产免费久久久久久下载 | 91九色在线视频 | 在线免费观看黄色 | avv天堂| 国内精品小视频 | 成人中文字幕+乱码+中文字幕 |