GeekBand~iOS~開(kāi)發(fā)高級(jí)進(jìn)階~第四周

數(shù)據(jù)存儲(chǔ)--簡(jiǎn)易數(shù)據(jù)存儲(chǔ)

數(shù)據(jù)持久化

1.本地:文件 NSHomeDirectory() / Documents涂邀;數(shù)據(jù)庫(kù)
2.云端:iCloud (文件,Key-Value數(shù)據(jù)庫(kù));第三方

NSData

Cocoa提供用來(lái)表示通用數(shù)據(jù):
讀峻凫、寫(xiě)愕撰、訪問(wèn)

圖片

->創(chuàng)建 UIImage 對(duì)象
-->文件 - bundle
-->NSData
-->CGContext
- CGImageRef CGBitmapContextCreateImage(ctx);

->保存 UIImage 對(duì)象
-->via data
- NSData * UIImagePNGRepresentation (UIImage *image);
- NSData * UIImageJPEGRepresentation (UIImage *image, CGFloat compressionQuality);

NSString 與存儲(chǔ)

->文本讀寫(xiě)
->文件路徑處理

Key Value數(shù)據(jù)

->讀

+(NSDictionary<KeyType, ObjectType> *) dictionaryWithContentsOfFile:(NSString *)
+ (NSDictionary<KeyType, ObjectType> *) dictionaryWithContentsOfURL:(NSURL *)

->寫(xiě)

- (BOOL)writeToFile:(NSString *) atomically:(BOOL)
- (BOOL)writeToURL:(NSURL *) atomically:(BOOL)
配置參數(shù)

->用來(lái)保存默認(rèn)值
-->經(jīng)常變的用自己的UI,不常改的放 settings bundle
-->Domian:

- NSArgumentDomain:Xcode.app/Contents/MacOSX/Xcode -IndexOnOpen NO
- Application:NSUserDefaults
- NSGlobalDomain:defaults read NSGlobalDomain
- Languages:AppleLanguage指定用戶(hù)使用的語(yǔ)言
- NSRegistrationDomain:[NSUserDefaults registerDefaults:]提供的默認(rèn)值

->Mac OS X的defaults命令

defaults read <domain>[key]
defaults find Xcode.IDE
NSUserDefaults

->訪問(wèn)

[NSUserDefaults standardUserDefaults]  //本地
[NSUbiquitousKeyValueStore defaultStore]  //iCloud

->登記默認(rèn)值

- [NSUserDefaults registerDefaults:dict];

->訪問(wèn)
讀:

-<type>ValueForKey:

寫(xiě):

-set<Type>:forKey:
Settings Bundle

->Settings.bundle in app root
->Access via standardDefaults

沙盒、文件與對(duì)象歸檔

沙盒機(jī)制(SandBox)是一種安全體系斟冕,它規(guī)定了應(yīng)用程序只能在為該應(yīng)用創(chuàng)建的文件夾內(nèi)讀取文件口糕,不可以訪問(wèn)其他地方的內(nèi)容。所有的非代碼文件都保存在這個(gè)地方磕蛇,比如圖片景描、聲音券时、屬性列表和文本文件等。
1.每個(gè)應(yīng)用程序都在自己的沙盒內(nèi)
2.不能隨意跨越自己的沙盒去訪問(wèn)別的應(yīng)用程序沙盒的內(nèi)容
3.應(yīng)用程序向外請(qǐng)求或接收數(shù)據(jù)都需要經(jīng)過(guò)權(quán)限認(rèn)證


沙盒目錄.png

MyApp.app
①存放內(nèi)容
該目錄包含了應(yīng)用程序本身的數(shù)據(jù)伏伯,包括資源文件和可執(zhí)行文件等橘洞。程序啟動(dòng)以后,會(huì)根據(jù)需要從該目錄中動(dòng)態(tài)加載代碼或資源到內(nèi)存说搅,這里用到了lazy loading的思想炸枣。
②整個(gè)目錄是只讀的
為了防止被篡改,應(yīng)用在安裝的時(shí)候會(huì)將該目錄簽名弄唧。非越獄情況下适肠,該目錄中內(nèi)容是無(wú)法更改的;在越獄設(shè)備上如果更改了目錄內(nèi)容候引,對(duì)應(yīng)的簽名就會(huì)被改變侯养,這種情況下蘋(píng)果官網(wǎng)描述的后果是應(yīng)用程序?qū)o(wú)法啟動(dòng),我沒(méi)實(shí)踐過(guò)澄干。
③是否會(huì)被iTunes同步

Documents
①存放內(nèi)容
我們可以將應(yīng)用程序的數(shù)據(jù)文件保存在該目錄下逛揩。不過(guò)這些數(shù)據(jù)類(lèi)型僅限于不可再生的數(shù)據(jù),可再生的數(shù)據(jù)文件應(yīng)該存放在Library/Cache目錄下麸俘。
②是否會(huì)被iTunes同步

Documents/Inbox
①存放內(nèi)容
該目錄用來(lái)保存由外部應(yīng)用請(qǐng)求當(dāng)前應(yīng)用程序打開(kāi)的文件辩稽。
比如我們的應(yīng)用叫A,向系統(tǒng)注冊(cè)了幾種可打開(kāi)的文件格式从媚,B應(yīng)用有一個(gè)A支持的格式的文件F逞泄,并且申請(qǐng)調(diào)用A打開(kāi)F。由于F當(dāng)前是在B應(yīng)用的沙盒中拜效,我們知道喷众,沙盒機(jī)制是不允許A訪問(wèn)B沙盒中的文件,因此蘋(píng)果的解決方案是講F拷貝一份到A應(yīng)用的Documents/Inbox目錄下紧憾,再讓A打開(kāi)F到千。
②是否會(huì)被iTunes同步

Library
①存放內(nèi)容
蘋(píng)果建議用來(lái)存放默認(rèn)設(shè)置或其它狀態(tài)信息。
②是否會(huì)被iTunes同步
是稻励,但是要除了Caches子目錄外
Library/Caches
①存放內(nèi)容
主要是緩存文件父阻,用戶(hù)使用過(guò)程中緩存都可以保存在這個(gè)目錄中。前面說(shuō)過(guò)望抽,Documents目錄用于保存不可再生的文件加矛,那么這個(gè)目錄就用于保存那些可再生的文件,比如網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)煤篙。鑒于此斟览,應(yīng)用程序通常還需要負(fù)責(zé)刪除這些文件。
②是否會(huì)被iTunes同步
否辑奈。
Library/Preferences
①存放內(nèi)容
應(yīng)用程序的偏好設(shè)置文件苛茂。我們使用NSUserDefaults寫(xiě)的設(shè)置數(shù)據(jù)都會(huì)保存到該目錄下的一個(gè)plist文件中已烤,這就是所謂的寫(xiě)道plist中!
②是否會(huì)被iTunes同步

tmp
①存放內(nèi)容
各種臨時(shí)文件妓羊,保存應(yīng)用再次啟動(dòng)時(shí)不需要的文件胯究。而且,當(dāng)應(yīng)用不再需要這些文件時(shí)應(yīng)該主動(dòng)將其刪除躁绸,因?yàn)樵撃夸浵碌臇|西隨時(shí)有可能被系統(tǒng)清理掉裕循,目前已知的一種可能清理的原因是系統(tǒng)磁盤(pán)存儲(chǔ)空間不足的時(shí)候。
②是否會(huì)被iTunes同步

獲取主要目錄路徑方式:
1.沙盒
NSLog(@"%@",NSHomeDirectory());
2.tmp
NSLog(@"%@",NSTemporaryDirectory());
3.Myapp.app
NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);
4.Documents

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
NSString *path = [paths objectAtIndex:0];  
NSLog(@"%@",path); 
iTunes File Sharing

Info.plist
<key>UIFileSharingEnabled</key>

應(yīng)用間共享文件

->用戶(hù)授權(quán) + 操作系統(tǒng)代為操作
-->本機(jī) “Open in”
- UIDocumentInteractionController
-->iCloud
- UIDocumentPickerViewController

對(duì)象歸檔

encoder,decoder
NSEncoding protocol
1.保存數(shù)據(jù)過(guò)程

//1.創(chuàng)建對(duì)象
    YYstudent *s=[[YYstudent alloc]init];
    s.name=@"wendingding";
    s.age=23;
    s.height=1.7;
    s.weight=62;
    
    //2.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    NSLog(@"path=%@",path);
    
    //3.將自定義的對(duì)象保存到文件中
     [NSKeyedArchiver archiveRootObject:s toFile:path];

2.讀取數(shù)據(jù)過(guò)程

//1.獲取文件路徑
    NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *path=[docPath stringByAppendingPathComponent:@"person.yangyang"];
    //2.從文件中讀取對(duì)象
    YYstudent *s=[NSKeyedUnarchiver unarchiveObjectWithFile:path];

3.遵守NSCoding協(xié)議净刮,并實(shí)現(xiàn)該協(xié)議中的兩個(gè)方法剥哑。
4.如果是繼承,則子類(lèi)一定要重寫(xiě)那兩個(gè)方法淹父。因?yàn)閜erson的子類(lèi)在存取的時(shí)候株婴,會(huì)去子類(lèi)中去找調(diào)用的方法,沒(méi)找到那么它就去父類(lèi)中找暑认,所以最后保存和讀取的時(shí)候新增加的屬性會(huì)被忽略困介。需要先調(diào)用父類(lèi)的方法,先初始化父類(lèi)的穷吮,再初始化子類(lèi)的逻翁。
5.保存數(shù)據(jù)的文件的后綴名可以隨意命名。
6.通過(guò)plist保存的數(shù)據(jù)是直接顯示的捡鱼,不安全。通過(guò)歸檔方法保存的數(shù)據(jù)在文件中打開(kāi)是亂碼的酷愧,安全驾诈。

SQLite3

SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù),安卓和ios開(kāi)發(fā)使用的都是SQLite數(shù)據(jù)庫(kù)溶浴。3是版本號(hào)乍迄,是SQLite的第三個(gè)版本。
特點(diǎn):
1)它占用資源非常的低士败,在嵌入式設(shè)備中闯两,可能只需要幾百K的內(nèi)存就夠了
2)它的處理速度比Mysql、PostgreSQL這兩款著名的數(shù)據(jù)庫(kù)都還快
數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的步驟
1谅将、新建一個(gè)數(shù)據(jù)庫(kù)
2漾狼、新建一張表(table)
3、添加多個(gè)字段(column饥臂,列逊躁,屬性)
4、添加多行記錄(row隅熙,每行存放多個(gè)字段對(duì)應(yīng)的值)
數(shù)據(jù)操作語(yǔ)句(DML:Data Manipulation Language) 包括insert稽煤、update核芽、delete等操作 上面的3種操作分別用于添加、修改酵熙、刪除表中的數(shù)據(jù)轧简。
數(shù)據(jù)查詢(xún)語(yǔ)句(DQL:Data Query Language) 可以用于查詢(xún)獲得表中的數(shù)據(jù) 關(guān)鍵字select是DQL(也是所有SQL)用得最多的操作 其他DQL常用的關(guān)鍵字有where,order by匾二,group by和having吉懊。
SQLite的字段類(lèi)型 integer : 整型值 real : 浮點(diǎn)值 text : 文本字符串 blob : 二進(jìn)制數(shù)據(jù)(比如文件) 實(shí)際上SQLite是無(wú)類(lèi)型的,但為了保持良好的編程規(guī)范假勿,方便程序員之間的交流借嗽,編寫(xiě)建表語(yǔ)句的時(shí)候最好還是加上每個(gè)字段的具體類(lèi)型。

在iOS中使用 SQLite

->鏈接 libSQLite3.dylib和導(dǎo)入頭文件#import
->使用SQLite3函數(shù)
-->打開(kāi)/新建數(shù)據(jù)庫(kù)文件

// 拼接數(shù)據(jù)庫(kù)地址
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *sqlFile = [path stringByAppendingPathComponent:@student.sqlite];

// 打開(kāi)數(shù)據(jù)
    int result = sqlite3_open(sqlFile.UTF8String, &_db);
// 判斷是否打開(kāi)成功
    if (result == SQLITE_OK) {
        NSLog(@打開(kāi)成功);
        // 創(chuàng)建表
        /*
         第一個(gè)參數(shù): 需要執(zhí)行SQL語(yǔ)句的數(shù)據(jù)庫(kù)對(duì)象
         第二個(gè)參數(shù): 需要執(zhí)行的SQL語(yǔ)句
         第三個(gè)參數(shù): 回調(diào)函數(shù)
         第四個(gè)參數(shù): 第三個(gè)參數(shù)的參數(shù)
         第五個(gè)參數(shù): 接收錯(cuò)誤信息
         */
                    // 創(chuàng)建表的sql語(yǔ)句
        NSString *sql = @CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, age INTEGER, score REAL);;
        result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
        if (result == SQLITE_OK) {
            NSLog(@創(chuàng)建表成功);
        }else
        {
            NSLog(@創(chuàng)建表失敗);
        }
    }else
    {
        NSLog(@打開(kāi)失敗);
    }

-->執(zhí)行SQL命令
2转培、插入數(shù)據(jù)

    NSString *sql = @INSERT INTO t_student(age, score, name) VALUES ('28', 100, 'leo');;
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@插入成功);
    }

3恶导、修改數(shù)據(jù)

    NSString *sql = @UPDATE t_student SET name = 'txt';;
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@修改成功);
    }

4、刪除數(shù)據(jù)

    NSString *sql = @DELETE FROM t_student WHERE id = 1; ;
    int result =  sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@刪除成功);
    }

5浸须、查詢(xún)數(shù)據(jù)

    NSString *sql = @SELECT * FROM t_student;;
    sqlite3_stmt *stemt = NULL;
    /*
     第一個(gè)參數(shù):需要執(zhí)行SQL語(yǔ)句的數(shù)據(jù)庫(kù)
     第二個(gè)參數(shù):需要執(zhí)行的SQL語(yǔ)句
     第三個(gè)參數(shù): 告訴系統(tǒng)SQL語(yǔ)句的長(zhǎng)度, 如果傳入一個(gè)小于0的數(shù), 系統(tǒng)會(huì)自動(dòng)計(jì)算
     第四個(gè)參數(shù):結(jié)果集, 里面存放所有查詢(xún)到的數(shù)據(jù)
     */
    sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stemt, NULL);
    // 判斷有沒(méi)有查詢(xún)結(jié)果
    while (sqlite3_step(stemt) == SQLITE_ROW) {
        // 取出第一個(gè)字段的查詢(xún)得結(jié)果
        const unsigned char *name = sqlite3_column_text(stemt, 1);
        // 取出第一個(gè)字段的查詢(xún)得結(jié)果
        int age = sqlite3_column_int(stemt, 2);
        // 取出第一個(gè)字段的查詢(xún)得結(jié)果
        double score = sqlite3_column_double(stemt, 3);
        NSLog(@%s %d %f, name, age, score);
    }

-->關(guān)閉數(shù)據(jù)庫(kù)
sqlite3_close(database);

Core Data

Apple提供的對(duì)象持久化框架惨寿。使用數(shù)據(jù)庫(kù)作為底層存儲(chǔ),也可以使用XML文件删窒。
CoreData中有這么幾個(gè)常用的元素:

名稱(chēng)                       作用
NSManagedObjectModel        對(duì)象模型裂垦,指定所用對(duì)象文件
NSPersistentStoreCoordinator    持久化存儲(chǔ)協(xié)調(diào)器,設(shè)置對(duì)象的存儲(chǔ)方式和數(shù)據(jù)存放位置
NSManagedObjectContext    對(duì)象管理上下文肌索,負(fù)責(zé)數(shù)據(jù)的實(shí)際操作(重要)
NSEntityDescriptor        實(shí)體描述符蕉拢,描述一個(gè)實(shí)體,可以用來(lái)生成實(shí)體對(duì)應(yīng)的對(duì)象
NSManagedObject          對(duì)象
NSFetchRequest            對(duì)象查詢(xún)诚亚,相當(dāng)于SQL的Select語(yǔ)句

使用步驟

在創(chuàng)建項(xiàng)目的時(shí)候晕换,勾選“Core Data”選項(xiàng)。Xcode會(huì)自動(dòng)替我們
在“AppDelegate”中加入創(chuàng)
建“NSManagedObjectModel”站宗、“NSPersistentStoreCoordinator”和“
NSManagedObjectContext”等對(duì)象闸准,方便后面的使用。
1.創(chuàng)建"NSManagedObjectModel"對(duì)象

- (NSManagedObjectModel *)managedObjectModel {
    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }

    //CoreData模型文件的路徑梢灭,注意編譯好的模型文件名擴(kuò)展名為"momd"
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData01" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}

2.創(chuàng)建"NSPersistentStoreCoordinator"對(duì)象

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    //指定需要持久化的模型對(duì)象
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    //持久化的存儲(chǔ)文件
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData01.sqlite"];
    NSError *error = nil;
    //設(shè)置存儲(chǔ)格式為SQLite
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

    }

    return _persistentStoreCoordinator;
}

3.創(chuàng)建上下文

- (NSManagedObjectContext *)managedObjectContext {
    // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (!coordinator) {
        return nil;
    }

    //創(chuàng)建管理上下文
    _managedObjectContext = [[NSManagedObjectContext alloc] init];
    //關(guān)聯(lián)上下文與存儲(chǔ)對(duì)象
    [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    return _managedObjectContext;
}

4 . 設(shè)置模型文件夷家,添加實(shí)體(Entity)
點(diǎn)擊“CoreData01.xcdatamodelId”文件,然后添加一個(gè)實(shí)體“Student”敏释,并增加幾個(gè)屬性库快。Core Data中的實(shí)體類(lèi)似于數(shù)據(jù)庫(kù)的表定義,規(guī)定了不同字段(屬性)的名字和類(lèi)型颂暇。
5 . 創(chuàng)建模型對(duì)象的類(lèi), "Editor > Create NSManagedobject Subclass"缺谴。
6 . 選擇使用標(biāo)量定義數(shù)值類(lèi)型的屬性(默認(rèn)使用NSNumber類(lèi)型定義int、float等類(lèi)型的屬性)。
7 . Xcode自動(dòng)創(chuàng)建于實(shí)體同名的類(lèi)湿蛔,并且繼承自“NSManagedObject”膀曾。
8 . 創(chuàng)建對(duì)象并存儲(chǔ)。

//獲取AppDelegate中創(chuàng)建的上下文對(duì)象
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

NSManagedObjectContext *context = appDelegate.managedObjectContext;

//獲取實(shí)體描述符
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:context];
//創(chuàng)建對(duì)象
Student *student = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
//設(shè)置對(duì)象的屬性
student.name = @"張三";
//保存數(shù)據(jù)
[context save:nil];

9 . 可以通過(guò)"NSFetchRequest"從文件中獲取數(shù)據(jù)阳啥。

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = appDelegate.managedObjectContext;

//創(chuàng)建請(qǐng)求對(duì)象添谊,用于獲取實(shí)體Student所對(duì)應(yīng)的全部數(shù)據(jù),可以通過(guò)給NSFetchRequest設(shè)置predicate和sortDescriptors對(duì)結(jié)果進(jìn)行篩選和排序察迟。
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
NSArray *result = [context executeFetchRequest:fetchRequest error:nil];
NSLog(@"%@", result);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斩狱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扎瓶,更是在濱河造成了極大的恐慌所踊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件概荷,死亡現(xiàn)場(chǎng)離奇詭異秕岛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)误证,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)继薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人愈捅,你說(shuō)我怎么就攤上這事遏考。” “怎么了蓝谨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵灌具,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我像棘,道長(zhǎng)稽亏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任缕题,我火速辦了婚禮,結(jié)果婚禮上胖腾,老公的妹妹穿的比我還像新娘烟零。我一直安慰自己,他們只是感情好咸作,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布锨阿。 她就那樣靜靜地躺著,像睡著了一般记罚。 火紅的嫁衣襯著肌膚如雪墅诡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天桐智,我揣著相機(jī)與錄音末早,去河邊找鬼烟馅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛然磷,可吹牛的內(nèi)容都是我干的郑趁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姿搜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寡润!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起舅柜,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梭纹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后致份,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體变抽,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年知举,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞬沦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雇锡,死狀恐怖逛钻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锰提,我是刑警寧澤曙痘,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站立肘,受9級(jí)特大地震影響边坤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谅年,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一茧痒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧融蹂,春花似錦旺订、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至意乓,卻和暖如春樱调,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工笆凌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圣猎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓菩颖,卻偏偏與公主長(zhǎng)得像样漆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晦闰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容