iOS -开发笔记。

不积跬步无以至千里。再愚蠢的Bug,也是进步的垫脚石。

Mac 软件安装提示“文件损坏,打不开”

文件损坏,打不开
sudo spctl  --master-disable
sudo xattr -d com.apple.quarantine /Applications/Cornerstone.app

i386, x86_64 模拟器;
armv6,armv7 ,armv7s, arm64真机。
arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad| iPad Mini 2 iPad mini
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4

Architectures 错误 静态库不支持armv7架构。

The linked library 'libxxx.a/Framework' is missing one or more architectures required by this target: armv7.

解决方法:在buildsetting将其排除。

Target -> Build Setting -> Exculded Architectures

EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8 EXCLUDED_ARCHS=$(inherited) $(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_$(EFFECTIVE_PLATFORM_SUFFIX)__NATIVE_ARCH_64_BIT_$(NATIVE_ARCH_64_BIT))

图片渲染模式

imageWithRenderingMode:
UIImageRenderingModeAutomatic,
//根据图片的使用环境和所处的绘图上下文自动调整渲染模式。
UIImageRenderingModeAlwaysOriginal,
// 始终绘制图片原始状态
UIImageRenderingModeAlwaysTemplate,
// 始终根据Tint Color绘制图片,忽略图片的颜色信息。

#define strongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
#define weakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define kWeakself(type) __weak typeof(type) weak##type = type;
#define kStrongSelf(type) __strong typeof(type) type = weak##type;

导航栏控制器

  self.edgesForExtendedLayout = UIRectEdgeNone;//tableview不延展至导航栏下
  self.automaticallyAdjustsScrollViewInsets=NO;//默认YES->控件尺寸从导航栏下面开始(滑动tableview可滑动至导航栏下)

info.plist

添加App需要的一些设备权限:
相机NSCameraUsageDescription
相册NSPhotoLibraryUsageDescription
通讯录NSContactsUsageDescription
始终访问位置NSLocationAlwaysUsageDescription
位置NSLocationUsageDescription
在使用期间访问位置NSLocationWhenInUseUsageDescription
麦克风NSMicrophoneUsageDescription
访问蓝牙NSBluetoothPeripheralUsageDescription
访问日历NSCalendarsUsageDescription
访问媒体资料库NSAppleMusicUsageDescription
访问健康分享NSHealthShareUsageDescription
访问健康更新NSHealthUpdateUsageDescription
访问运动与健身NSMotionUsageDescription
访问提醒事项NSRemindersUsageDescription


示例

SVN提交冲突问题

.xcodeproj工程文件冲突,往往是多人同时做了例如增删文件等行为,那么保存/提交就会出现project.pbxproj文件冲突,svn就会在文件中加上>>>>> 还有<<<<<来区分谁做的修改,只要把这个文件用编辑器打开,搜mine到了把这些冲突标记删除,将服务器和自己的修改都保留应该就没事了。

解决方法如下:

1.右键点击.xcodeproj,选择显示包内容;
2.双击打开project.pbxproj文件;
3.找到类似如下的冲突信息(可用command + F 搜索)
4.删除

    <<<<<< .mine
    =======
    >>>>>>> .r156

留下下面的:

    .... in Resources */,
    ... in Resources */,

5.保存文件,退出,再打开即可使用。

异步加载网络图片

-(void)downloadImageWithUrl:(NSString *)imageDownloadURLStr withImgView:(UIImageView *)_imageView{
    __block UIImage *image = [[UIImage alloc] init];
    NSURL *imageDownloadURL = [NSURL URLWithString:imageDownloadURLStr];
    dispatch_queue_t asynchronousQueue = dispatch_queue_create("imageDownloadQueue", NULL);
    dispatch_async(asynchronousQueue, ^{
        NSError *error;
        NSData *imageData = [NSData dataWithContentsOfURL:imageDownloadURL options:NSDataReadingMappedIfSafe error:&error];
        if (imageData) {
            image = [UIImage imageWithData:imageData];
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            [_imageView setImage:image]
        });
    });
}

移除Main.storyboard

  • 工程配置中移除关联
    TARGETS->Deploymeny info 清空Main interface 选项中值
  • 移除Main.storyboard关联类
    点击Main.storyboard文件 选择 Show the identity inspector -> Custom Class 清除Class关联
  • 删除Main.storyboard文件。

Wordspace 管理多工程 找不到头文件

  • 方法一: Build setting -> User Header Search Paths 添加$(BUILT_PRODUCTS_DIR) 但是不能simulator 与真机随意切换 项目中直接使用真机 未尝试simulator,暂未处理。
  • 方法二:Build setting -> Header search paths 编辑:../工程名或静态库名 或者 ../../工程名或静态库名。解决。

制作静态库失败

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for: -lQmyKit
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lQmyKit is not an object file (not allowed in a library)
  • 检查Library Search Paths 是否正确。
    $(PROJECT_DIR)/

设置启动页为LaunchImage

  • 1.在Assets.xcassets中新建LaunchImage
    2.在项目TARGETS->General->App Icons and Launch Images中设置 Launch Images Source 为LaunchImage,并将Launch Screen File 设为空
    3.在LaunchImage 添加相应启动图片。

iOS系统升级导致无法真机调试

倘若你升级的真机系统,而Xcode还是旧版本,真机调试时会出现Could not find Developer Disk Image。升级Xcode,又很慢。Just do it: 进入下面路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 导入你需要的包文件SDK(百度下载)。
若还是不行 上官网更新Xcode:https://developer.apple.com/download/

Archives 打包出现 Other Items

原因为打包时产生了一些不必要的文件
解决方法:

  • 静态库的skip install设置为YES
  • 将子项目中Build Phases→Copy Headers中的所有头文件拉到Project下,即Public和Private下不能有文件
  • 清空Build Settings→Deployment→Installation Directory选项的内容

CocoaPods Podfile 文件

platform:ios,'8.0'
target 'AFNetworkingDemo' do
  pod 'AFNetworking', '~> 3.0'
end

Ruby:
查看本地ruby资源:gem source -l

查看ruby cocoapods版本 ruby -v pod --version

https://rubygems.org/
移除https://rubygems.org/替换为https://gems.ruby-china.com/
gem source --remove https://rubygems.org/
gem source --add https://gems.ruby-china.com/
安装cocospods
sudo gem install cocoapods

代理属性为何使用weak

代理的销毁不能由当前遵从协议的类控制,倘若属性为strong,则会造成循环应用。

删除数组中重复对象

NSArray *newArr = [oldArr valueForKeyPath:@“@distinctUnionOfObjects.self"];

颜色转图片

+ (UIImage *)imageWithColor:(UIColor *)color {
  CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
  UIGraphicsBeginImageContext(rect.size);
  CGContextRef context = UIGraphicsGetCurrentContext();
 
  CGContextSetFillColorWithColor(context, [color CGColor]);
  CGContextFillRect(context, rect);
 
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
 
  return image;
}

Pod 错误

down下来的项目出现以下错误时
方法1. 进入项目根目录 执行pod update||pod install即可。

diff: /../Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

方法2.Build Phases勾选 Run script only when installing

执行延迟函数

  dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, 1*NSEC_PER_SEC);
  dispatch_after(delay, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      
    });

异步下载数据

 dispatch_queue_t asynchronousQueue = dispatch_queue_create("imageDownloadQueue", NULL);
    //创建异步线程
    dispatch_async(asynchronousQueue, ^{
        //网络下载图片  NSData格式
        NSError *error;
        NSData *imageData = [NSData dataWithContentsOfURL:imageDownloadURL options:NSDataReadingMappedIfSafe error:&error];
        if (imageData) {
            image = [UIImage imageWithData:imageData];
        }
        //回到主线程更新UI
        dispatch_async(dispatch_get_main_queue(), ^{
            [_imageView setImage:image];
            [_myActivity stopAnimating];
        });
    });

CADisplayLink

使用CADisplayLink NStimer绘制页面时默认RunLoopMode为NSDefaultRunLoopMode。此时主线程中操作某些UI事件(例如UITableview滑动)会造成 NSDefaultRunLoopMode 模式中注册的事件是不会执行,此时mode被切换为NSEventTrackingRunLoopMode,若要保证定时器绘制不被影响可选择NSRunLoopCommonModes模式。

Xcode编译第三方库,出现

Undefined symbols for architecture arm64:   
"_OBJC_CLASS_$_xxx", referenced from:   

原因1.相关工程文件未导入:
处理方式:Build Phase->Compile Sources 添加该库.m文件。
原因2.缺少链接静态库:
处理方式:OBJC_CLASS$_xxx 查询xxx所在的库并加入。
原因3. 查看.a支持的架构
Valid Architectures 填入对应的armNumber

Xcode升级后联想功能失效无法Command类库处理方法

Xcode->Preferences->Location 

进入DerivedData 删除该文件夹下的内容 重启Xcode。

CADisplayLink和NSTimer的区别

NSTimer占用系统资源较多
NSTimer使用完后,一定要销毁,把它设置成nil。
CADisplayLink本来就在进程中,每秒进行60次。
核心动画的时候,最好使用CADisplayLink

防止图片上传发生偏转

+ (UIImage *)fixOrientation:(UIImage *)aImage {
    
    // No-op if the orientation is already correct
    if (aImage.imageOrientation == UIImageOrientationUp)
        return aImage;
    
    // We need to calculate the proper transformation to make the image upright.
    // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
    CGAffineTransform transform = CGAffineTransformIdentity;
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationDown:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;
            
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformRotate(transform, M_PI_2);
            break;
            
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
            transform = CGAffineTransformRotate(transform, -M_PI_2);
            break;
        default:
            break;
    }
    
    switch (aImage.imageOrientation) {
        case UIImageOrientationUpMirrored:
        case UIImageOrientationDownMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
            
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRightMirrored:
            transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
            transform = CGAffineTransformScale(transform, -1, 1);
            break;
        default:
            break;
    }
    
    // Now we draw the underlying CGImage into a new context, applying the transform
    // calculated above.
    CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
                                             CGImageGetBitsPerComponent(aImage.CGImage), 0,
                                             CGImageGetColorSpace(aImage.CGImage),
                                             CGImageGetBitmapInfo(aImage.CGImage));
    CGContextConcatCTM(ctx, transform);
    switch (aImage.imageOrientation) {
        case UIImageOrientationLeft:
        case UIImageOrientationLeftMirrored:
        case UIImageOrientationRight:
        case UIImageOrientationRightMirrored:
            // Grr...
            CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
            break;
            
        default:
            CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
            break;
    }
    
    // And now we just create a new UIImage from the drawing context
    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *img = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return img;
}

CALayer中anchorPoint、position、frame关系

  • frame中的X,Y表示sublayer左上角相对于supLayer的左上角的距离。
  • position中的X,Y表示sublay锚点相对于supLayer的左上角的距离。
  • anchorPoint中的X,Y表示锚点的x,y的相对距离比例值。

当确定锚点,改变frame时, position的值为:

position.x = frame.origin.x + anchorPoint.x * bounds.size.width;  
position.y = frame.origin.y + anchorPoint.y * bounds.size.height;

确定锚点, 改变position时, frame的值为:

frame.origin.x = position.x - anchorPoint.x * bounds.size.width;  
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

改变锚点, frame的值变化为

frame.origin.x = - anchorPoint.x * bounds.size.width + position.x;  
frame.origin.y = - anchorPoint.y * bounds.size.height + position.y

设置字体颜色

- (NSMutableAttributedString *)setColorTextStr:(NSString *)title
                                 withTextColor:(UIColor *)colorText
                                withLabelTitle:(NSString *)content
                                withTitleColor:(UIColor *)colorContent{
    
    NSString *textContent = [NSString stringWithFormat:@"%@  %@",title,content];
    NSRange rangeTitle   =[textContent rangeOfString:title];
    NSRange rangeContent =[textContent rangeOfString:content];
    NSMutableAttributedString *textAttr = [[NSMutableAttributedString alloc]initWithString:textContent];
    [textAttr addAttribute:NSForegroundColorAttributeName value:colorText range:rangeTitle];
    [textAttr addAttribute:NSForegroundColorAttributeName value:colorContent range:rangeContent];
    [textAttr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:15] range:NSMakeRange(0,textContent.length)];
    return textAttr;
    
}

Xcode新建工程编译失败

Safe Area Layout Guide Before IOS 9.0

处理方式:选中stroyboard ->show the file inspector -> 去掉勾选的Use Safe Area Layout Guide

调用safari打开链接

NSString *textURL = @"https://www.baidu.com/";  
NSURL *cleanURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", textURL]];  
[[UIApplication sharedApplication] openURL:cleanURL];  

多人开发打包时出现has iOS Distribution certificate but its private key is not installed

原因在于苹果规定.cer证书只能存在一个电脑上,其他开发者使用时即便从开发者中心download也是无效的,因此 如果另一台电脑想要用的话,需要导出为.p12 file ,安装到其他电脑上。

关于Debug模式下weak修饰的view正常显示,Release模式View无法显示问题

Debug和Release和内存分配和释放方式是不同的,Debug模式下内存会延迟释放,weak的对象会延迟,但Release下进行了优化,所以达到释放条件会立即释放,从而造成weak修饰的view在Release模式下无法正常显示。调整为Strong即可。

反射机制:

对于任意一个类,都能够知道这个类的都有属性和方法
对于任意一个对象,都能够调用它的任意一个方法和属性

毒药与小白鼠

问题:1000瓶水有1瓶水有毒,老鼠喝一滴24小时后就会死,问最少需要多少只老鼠,以及如何检测出毒药?
1.至少需要10只老鼠。采用二分法计算小白鼠数量。
第一次: 将1-500瓶兑在一起喝。
如果老鼠死了,则拿另一只老鼠去品尝501-725瓶兑的药水。否则去喝2-250瓶兑的水。
采用如此二分法,因为2^10>1000 2^9<1000,所以10次就可以找出。
2.取10个烧杯编号1->10
给1000个试剂分别标上如下标签(10位长度):
0000000001 (第1瓶)
0000000010 (第2瓶)
0000000011 (第3瓶)
……
1111101000 (第1000瓶)
从编号最后1位是1的所有的试剂里面取出1滴混在一起(比如从第一瓶,第三瓶,。。。里分别取出一滴混在一起)并倒入编号为1的烧杯中。以此类推,从编号第一位是1的所有的试剂里面取出1滴混在一起并倒入编号为10的烧杯中。现在得到有10瓶烧杯编号的混合液,小白鼠排排站,分别标上10,9,。。。1号,并分别给它们灌上对应号码的混合液。24小时过去了,过来验尸吧:
从左到右,死了的小白鼠贴上标签1,没死的贴上0,最后得到一个序号,把这个序号换成10进制的数字,就是有毒的那瓶水的编号。
检验一下:假如第一瓶有毒,按照0000000001 (第1瓶),说明第1号混合液有毒,因此小白鼠的生死符为0000000001(编号为1的小白鼠挂了),0000000001二进制标签转换成十进制=1号瓶有毒;假如第三瓶有毒,0000000011 (第3瓶),第1号和第2号混合液有毒,因此小白鼠的生死符为00000011(编号为1,2的鼠兄弟挂了),0000000011二进制标签转换成十进制=3号瓶有毒。

Error: Multiple commands produce

移除Build phase > Copy Bundle Resource 中找到info.plist

Charles 手机安装好Charles证书仍抓不到https请求

iOS 10.3系统以后,需要在 设置→通用→关于本机→证书信任设置启用完全信任Charles证书。
Charles 配置Cocoa开发者社区

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)
这种编译失败情况多种
1.重复导入相关文件或头文件名
2.Other Linker Flags 设置问题:-ObjC ,-all_load
3.缺少必要系统库。

IQKeyboardManager 引起电池栏透明

IQUIView+Hierarchy.m文件修改
-(UIViewController*)topMostController 方法中的代码

-(UIViewController *)topMostController
{
    UIViewController  *rootController = [UIApplication  sharedApplication].keyWindow.rootViewController;
    if ([rootController isKindOfClass:[UITabBarController class]]) {
        UITabBarController *tabBarController = (UITabBarController *)rootController;
        UINavigationController *navController = tabBarController.selectedViewController;
        UIViewController *viewController = (UIViewController *)navController.visibleViewController;
        while (viewController.presentedViewController) {
            viewController = (UIViewController *)viewController.presentedViewController;
        }
        return viewController;
    } else if ([rootController isKindOfClass:[UINavigationController class]]) {
        UINavigationController *navController = (UINavigationController *)rootController;
        return navController.visibleViewController;
    } else if ([rootController isKindOfClass:[UIViewController class]]) {
        return rootController;
    } else {
        return nil;
    }
 
}

Duplicate symbol _kXXX in:

ViewA.o;
ViewB.o;
通常定义常量使用static const 修饰 ,若声明的kXXX变量不加static 编辑器会默认创建“外部符号”<enternal symbol>,若其他编译单元存在同名变量kXXX则会导致编译失败。

关于Compile Sources AS: Objective C++ 编译失败

第三方库冲突
Other Linker flags 加入 (inherited) User Header Paths 加入(PODS_ROOT) +$(PODS_ROOT)/第三方库地址

打包dYSM

Generate Debug Symbols ?NO 不生成
Debug Information Format
DWARF with dSYM File

Xcode Font&Colors ~/Library/Developer/Xcode/UserData/FontAndColorThemes/

libstdc++.6.0.9

path:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

关于Xcode10出现 Multiple commands produce ??? 'Info.plist' / Target '???' has copy command from ' ??? 'Info.plist' to ??? 'Info.plist'错误原因与解决方式

原因:Xcode10取消了对libstdc++6.0.9的支持,而使用的第三方库存在仍保持对libstdc++6.0.9的依赖。
解决:将libstdc++6.0.9(上面有路径)复制一份在该路径下。
同时调整Xcode配置Xcode-->File-->Workspace Settings-->Build System-->Legacy Build System

  • Transporter 交付失败问题排查:
  1. 避免ipa名称含中文;
  2. 确认Xcode buildsetting ->iOS Deployment Target最低支持版本;
  3. 确认线上版本是否低于交付版本 build 与version
  4. 尝试使用此方法
  • Cocoapads pod install 失败
LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 

处理方法:

git config --global http.postBuffer 4194304000

wrieshark ios抓包

rvictl -s  uuid 添加虚拟网卡接口
rvictl -x  uuid 删除
无权限弹窗终端输入
sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark 

好记性不如烂笔头。

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容