IOS开发中遇到的各种问题

问题有摘自http://ayjkdev.top/2016/03/18/solve-questions/

问题排序

1.报错Switch is in protect scope

解决方法:

switch(sender.tag){

case 1:

//block方式添加动画,这里需要加上大括号解决报错:Switch is in protect scope

{

center.y -= 20;

[UIView animateWithDuration:1 animations:^{

self.buttonImage.center = center;

}];

}

break;

}

2.使用UITextView输入框上半部仍为空白

解决方法:

self.automaticallyAdjustsScrollViewInsets = NO;

凡是继承UIScrolView的空间都会收到automaticallyAdjustsScrollViewInsets属性的影响。默认为YES,当有UINavigationbar的时候UITextView的表现为上面空白。

详情请参考博主的这边文章在交流群中的一次作答

3.在一个UIViewController中更改UITabBar的属性

解决方法:

在tabBar中声明一个更改的方法。在UIViewController中

_tabBarC =(TabBarController *)self.tabBarController;

取得tabBarController对象,再用_tabBarC去修改属性。

4.Navigation上自定义了右边按钮,如何取得该按钮对象。以及该按钮的属性设定。

解决方法:

取得对象可以把该按钮设为全局变量或者通过如下代码获取

[self.navigationController.navigationBar viewWithTag:tag];

对按钮的外形就行设定时,放在如下代码的前面。

self.navigationItem.rightBarButtonItem =[[UIBarButtonItem alloc]initWithCustomView:_sendButton];

但是对是否为禁用状态的设定必须在其后。

5.在三级控制器中由UITabBarController控制的UINavigationCotroller中,不能通过

[self.navigationController popToViewController:mainC animated:YES];

pop到另一个UINavigationCotroller。只能在同一UINavigationCotroller中push到不同的ViewController。

6.计算UITextView中的行数。

解决方法:

UITextView *textView =(UITextView *)[self.view viewWithTag:tag];

NSString *str = textView.text;

CGSize size =[str sizeWithAttributes:@{NSFontAttributeName:textView.font}];

int colomNumber = textView.contentSize.height/size.height;

NSLog(@"%d",colomNumber);

7.更改UISearchBarcancel按钮显示文本。

解决方法:

通过遍历定义在searchBar上的子视图来修改。

修改之前一定要打开取消按钮才能遍历修改。

searchBar.showsCancelButton = YES;

for(id searchBtn in[searchBar.subviews[0]subviews]){

if([searchBtn isKindOfClass:[UIButton class]]){

UIButton *cancalBtn =(UIButton *)searchBtn;

cancalBtn.enabled = YES;

[cancalBtn setTitle:@"取消" forState:UIControlStateNormal];

break;

}

}

8.当同一.m文件中出现两个继承于UIScrollView的类并设置了代理,使用

-(void)scrollViewDidScroll:(UIScrollView *)scrollView时两个视图各自滚动时都会掉用该方法。可能会产生不必要的bug。

解决方法:

可以设定对应了tag值来限制实现对应逻辑。

9. UITableViewStylePlainUITableViewStyleGrouped的区别

解决方法:

UITableViewStylePlain只有一组,列表形式

UITableViewStyleGrouped可以多组,列表分组形式,

扩展:如果要在UITableViewCell的头视图上放视图,看需求是怎么样,如果需要头视图跟随tableView滚动,最好选用UITableViewStyleGrouped。

UITableViewStylePlain设置头视图是之后,头视图不会跟随tableView滚动。当然,强行设置UITableViewStylePlain也行,不过需要在-(void)scrollViewDidScroll:(UIScrollView *)scrollView中进行计算处理scrollView.contentInset

-(void)scrollViewDidScroll:(UIScrollView *)scrollView {

CGFloat sectionHeaderHeight = 44;

if(scrollView.contentOffset.y <= sectionHeaderHeight && scrollView.contentOffset.y >= 0){

scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y,0,0,0);

} else if(scrollView.contentOffset.y >= sectionHeaderHeight){

scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight,0,0,0);

}

}

10.隐藏返回按钮

解决方法:

[self.navigationItem setHidesBackButton:YES animated:NO];

要写在当前ViewController中。

11.取消导航栏返回按钮的title

解决方法:

[[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0,-60)forBarMetrics:UIBarMetricsDefault];

12.PCH文件的建立

解决方法:

在Building setting中搜索Prefix Header,将它改为:$(SRCROOT)/项目名/…具体路径/pch文件名

如:$(SRCROOT)/TestDemo/test.pch

13.自定义UIScrollView的开启PageEnable的翻页效果。

解决方法:

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

//NSLog(@"%f",targetContentOffset -> x);

//NSLog(@"%f",velocity.x);

static int currentIndex;

int index =((kScreenWidth - kCellWidthNeedCut)/2 + targetContentOffset -> x)/(kScreenWidth - kCellWidthNeedCut);

if(currentIndex == index){

if(velocity.x > 0.4 && index < _topCollectViewArray.count - 1){

index ++;

} else if(velocity.x < -0.4 && index > 0){

index --;

}

}

targetContentOffset -> x =index *(kScreenWidth - kCellWidthNeedCut);

currentIndex = index;

}

14.JSON文件的读取

解决方法:

//需带上后缀名

+(id)jsonSerializationWithName:(NSString *)jsonName {

NSString *jsonPath =[[NSBundle mainBundle]pathForResource:jsonName ofType:nil];

NSData *jsonData =[NSData dataWithContentsOfFile:jsonPath];

id Dataserialization =[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

return Dataserialization;

}

15.iOS7 tableviewcell上面有button,但是button的点击效果没有

解决方法:

iOS6的UITableViewCell子视图(subviews)的容器是UITableViewCellContentView

iOS7的UITableViewCell子视图(subviews)的容器是UITableViewCellScrollView

由于IOS7中添加了滑动后出现编辑按钮的操作,所以使用scrollView来处理,UITableViewCellScrollView有对触摸的相应处理,导致按钮的点击效果被屏蔽了,但是点击事件还是在的,所以可以通过

1.设置

tableView.delaysContentTouches = NO;

2.同时在(UITableViewCell)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath代理方法中对scrollView把延迟触摸设置为NO即可

for(id obj in cell.subviews){

if([NSStringFromClass([obj class])isEqualToString:@"UITableViewCellScrollView"]){

UIScrollView *scroll =(UIScrollView *)obj;

scroll.delaysContentTouches =NO;

break;

}

}

16.UITableViewCell中的使用cellcell.contentView的区别

解决方法:

一般我们向cell中添加子视图,有两种方式

1.

[cell addSubview:]

2.

[cell.contentView addSubview:]

区别在于进行cell编辑时,比如cell内容向左移或者右移时,第一种方式子视图不会移动,第二种可以,所以这种情况一般使用第二种方式。

还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。

其实这两种方式在大多数情况是一样,不用纠结。

17.设置buttontitle属性

解决方法:

btn.frame = CGRectMake(x,y,width,height);

[btn setTitle: @"search" forState: UIControlStateNormal];

//设置按钮上的自体的大小

//[btn setFont:[UIFont systemFontSize: 14.0]];//这种可以用来设置字体的大小,但是可能会在将来的SDK版本中去除改方法

//应该使用

btn.titleLabel.font =[UIFont systemFontOfSize: 14.0];

[btn seBackgroundColor:[UIColor blueColor]];

//最后将按钮加入到指定视图superView

[superView addSubview: btn];

```objc

btn =[[UIButton alloc]initWithFrame:CGRectMake(5,5,200,40)];

//这样初始化的button,文字默认颜色是白色的,所有如果背景也是白色的话,是看不到文字的,

btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//设置文字位置,现设为居左,默认的是居中

[btn setTitle:@“title”forState:UIControlStateNormal];//添加文字

//有些时候我们想让UIButton的title居左对齐,我们设置

btn.textLabel.textAlignment = UITextAlignmentLeft

//是没有作用的,我们需要设置

btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft;

//但是问题又出来,此时文字会紧贴到做边框,我们可以设置

btn.contentEdgeInsets = UIEdgeInsetsMake(0,10,0,0);

//使文字距离做边框保持10个像素的距离。

18.项目中需要注意的地方:

解决方法:

项目更新的时候(Documents和Library会被保留)

沙盒路径中三个文件(苹果官方推荐)

1.Documents:用户产生的数据,都是一些比较重要的数据,比较小。这里面的数据会自动同步到Ituns(文件

不能太大,如果太大,可能上架时会被拒绝);

2.Library:1:电影,音乐,图片,报刊,电子书等等等<2>Preferences文件夹(会被同步),配置文件。

3.tmp:每次应用重启动都会自动清空

4.app:(应用程序包)系统隐藏的。

19.取消ScrollView的反弹效果

解决方法:

self.scrollView.bounces = NO;

20.UIView的坐标转换

解决方法:

//将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值

-(CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;

//将像素point从view中转换到当前视图中,返回在当前视图中的像素值

-(CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;

//将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect

-(CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

//将rect从view中转换到当前视图中,返回在当前视图中的rect

-(CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;

例把UITableViewCell中的subview(btn)的frame转换到controllerA中

// controllerA中有一个UITableView,UITableView里有多行UITableVieCell,cell上放有一个button

//在controllerA中实现:

CGRect rc =[cell convertRect:cell.btn.frame toView:self.view];

//或

CGRect rc =[self.view convertRect:cell.btn.frame fromView:cell];

//此rc为btn在controllerA中的rect

//或当已知btn时:

CGRect rc =[btn.superview convertRect:btn.frame toView:self.view];

//或

CGRect rc =[self.view convertRect:btn.frame fromView:btn.superview];

21.取得当前的点和之前的点,转换坐标系,判断当前点是否在视图内

解决方法:

CGPoint currentPoint =[touch locationInView:self];

CGPoint previousPoint =[touch previousLocationInView:self];

currentPoint =[self convertPoint:currentPoint toView:_myView];

_isInside =[_myView pointInside:currentPoint withEvent:event];

22.处理键盘弹出时,输入框被遮挡的问题:

解决方法:当键盘弹起时,系统会经过注册的观察者发出一个通知。

1.注册通知:

NSNotificationCenter *center =[NSNotificationCenter defaultCenter];

[center addObserver:self selector:@selector(keyBoardWillChangeAction:)name:UIKeyboardWillChangeFrameNotification object:nil];

2.接受通知后调用方法:

-(void)keyBoardWillChangeAction:(NSNotification *)notiInfo {

//NSLog(@"%@“,notiInfo.name);

//NSLog(@"%@",notiInfo.userInfo);

//NSLog(@"%@",notiInfo.object);

CGRect endUserInfoKey =[notiInfo.userInfo[UIKeyboardFrameEndUserInfoKey]CGRectValue];

CGFloat endUsrY = endUserInfoKey.origin.y;

CGFloat finalEndUser = endUsrY - self.view.frame.size.height;

self.view.transform = CGAffineTransformMakeTranslation(0,finalEndUser);

}

23.高效设置圆角

解决方法:

如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架)。而若要指定某几个角(小于4)为圆角而别的不变时,这种方法就不好用了。并且会造成离屏渲染,参考关于性能的一些问题

对于这种情况,Stackoverflow上提供了几种解决方案。其中最简单优雅的方案,就是使用UIBezierPath。下面给出一段示例代码。

UIView *view2 =[[UIView alloc]initWithFrame:CGRectMake(120,10,80,80)];

view2.backgroundColor =[UIColor redColor];[self.view addSubview:view2];

UIBezierPath *maskPath =[UIBezierPath bezierPathWithRoundedRect:view2.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10,10)];

CAShapeLayer *maskLayer =[[CAShapeLayer alloc]init];

maskLayer.frame = view2.bounds;

maskLayer.path = maskPath.CGPath;

view2.layer.mask = maskLayer;

其中,

byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight

指定了需要成为圆角的角。该参数是UIRectCorner类型的,可选的值有:

UIRectCornerTopLeft

UIRectCornerTopRight

UIRectCornerBottomLeft

UIRectCornerBottomRight

UIRectCornerAllCorners

从名字很容易看出来代表的意思,使用“|”来组合就好了。

24.DrawRect的注意事项:

解决方法:

-(void)drawRect:(CGRect)rect中rect是bounds,绘制文字等操作时,用的是传进来的rect(bounds)而不是自己设定的带x,y坐标的rect

不能自己调用drawRect方法,而是用[self setNeedsDisplay];让系统去调用。

25.多线程中更改刷新界面在主线程还是子线程?

解决方法:

主线程。在子线程中能更新的UI界面只是一个假象,实际上是子线程运行完毕,回到主线程继续执行UI更新的函数栈,由于时间很短,导致这个错觉。若子线程一直在执行,则主线程执行不了UI更新栈中的内容,UI界面也就不会更新。

26.Cell高度自适应:

解决方法:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

// _indexPathCell为点击需要刷新的indexPath

if(_indexPathCell.row == indexPath.row && _indexPathCell){

AYCommetModel *model = _mutableArrayOfCommentModel[indexPath.row];

NSString *str = model.content;

// 110为约束总长

float textLabelWidth = kScreenWidth - 110;

CGSize strSize =[str boundingRectWithSize:CGSizeMake(textLabelWidth,MAXFLOAT)options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0]} context:nil].size;

//增益Cell高度减去一行文字的高度

float offSet = 70 - 17.895;

//计算总高度

float sumOfHeight = strSize.height+ offSet;

//NSLog(@"indePath.row = %ld,Size = %@,_sumOfHeight = %f",indexPath.row,NSStringFromCGSize(strSize),sumOfHeight);

return sumOfHeight;

}

return 70;

}

这种方法其实并不是最好的,具体可以参考博主的这篇博客使用Masonry对cell布局

27.NSStringNSDictionary

解决方法:

NSData *infoData =[mutableString dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *infoDic =[NSJSONSerialization JSONObjectWithData:infoData options:NSJSONReadingMutableContainers error:nil];

转其他也类似,先转成NSData再转成其他的类。

28.从服务器GET回来的数据NSData有时候中文乱码。

解决方法:

先看清GET回来的包头,看清编码方式,有些为GBK编码的需要进行转换。

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSMutableString *mutableString =[[NSMutableString alloc]initWithData:data encoding:enc];

29.想要获取由服务器发回来的http

解决方法:

需要将NSURLResponse强转成NSHTTPURLResponse,比如status code就调用[httpUTLResponse statusCode]来获取。

30.UIButton设置Selected的问题:

解决方法:

当我们想创建一个自定义背景的按钮时,

UIButton* btn =[UIButton buttonWithType:UIButtonTypeCustom];

[btn setBackgroundImage:(UIImage*)forState:UIControlStateNormal];

如果我们想要一个selected的按钮,

[btn setBackgroundImage:(UIImage*)forState:UIControlStateSelected];

但这样还是有个问题,当我们设置了btn.selected = YES后,再去点击按钮,

发现会变灰色,说明在这个状态下没设置我们的皮肤,

[btn setBackgroundImage:(UIImage*)forState:UIControlStateSelected|UIControlStateHighlighted];

31.BOOLbool的区别

解决方法:

说明:Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的类型定义(typedef),它使用8位的存储空间。通过#define指令把YES定义为1,NO定义为0。

注意:Objective-C并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES和NO值只是在习惯上的一种理解。

问题:如果不小心将一个大于1字节的整型值(比如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果该低位字节刚好为0(比如8960,写成十六进制为0x2300),BOOL值将会被认作是0,即NO值。而对于bool类型,只有true和false的区别,即0为false,非0为true。

举例:

BOOL b1=8960;//实际是NO,因为8960换成十六进制为0x2300,BOOL只有8位存储空间,取0x2300的低8位,00,所以是NO

bool b2=8960;//实际是true,因为bool类型,非0即为true。

32.iOS更改状态栏(UIStatusBar)的颜色

解决方法:

1.plist设置statusBar

在plist里增加一行UIStatusBarStyle(或者是“Status bar style”也可以),这里可以设置两个值,就是UIStatusBarStyleDefault和UIStatusBarStyleLightContent

这样在app启动的launch页显示的时候,statusBar的样式就是上面plist设置的风格。

2.程序代码里设置statusBar

[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

或者

//相对于上面的接口,这个接口可以动画的改变statusBar的前景色

[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

不仅如此,iOS还很贴心的在UIViewController也增加了几个接口,

目的是让状态栏根据当前显示的UIViewController来定制statusBar的前景部分。

-(UIStatusBarStyle)preferredStatusBarStyle;

-(UIViewController *)childViewControllerForStatusBarStyle;

-(void)setNeedsStatusBarAppearanceUpdate

-(UIStatusBarStyle)preferredStatusBarStyle:

在你自己的UIViewController里重写此方法,返回你需要的值(UIStatusBarStyleDefault或者UIStatusBarStyleLightContent);

注意:

这里如果你只是简单的return一个固定的值,那么该UIViewController显示的时候,程序就会马上调用该方法,来改变statusBar的前景部分;

如果在该UIViewController已经在显示在当前,你可能还要在当前页面不时的更改statusBar的前景色,那么,你首先需要调用下面的setNeedsStatusBarAppearanceUpdate方法(这个方法会通知系统去调用当前UIViewController的preferredStatusBarStyle方法),这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view,系统最快能1秒刷新60次页面,具体要看程序设置)。

-(UIViewController *)childViewControllerForStatusBarStyle:

这个接口也很重要,默认返回值为nil。

当我们调用setNeedsStatusBarAppearanceUpdate时,系统会调用application.window的rootViewController的preferredStatusBarStyle方法,我们的程序里一般都是用UINavigationController做root,如果是这种情况,那我们自己的UIViewController里的preferredStatusBarStyle根本不会被调用;

这种情况下childViewControllerForStatusBarStyle就派上用场了,

我们要子类化一个UINavigationController,在这个子类里面重写childViewControllerForStatusBarStyle方法,如下:

-(UIViewController *)childViewControllerForStatusBarStyle{

return self.topViewController;

}

上面代码的意思就是说,不要调用我自己(就是UINavigationController)的preferredStatusBarStyle方法,而是去调用navigationController.topViewController的preferredStatusBarStyle方法,这样写的话,就能保证当前显示的UIViewController的preferredStatusBarStyle方法能影响statusBar的前景部分。

另外,有时我们的当前显示的UIViewController可能有多个childViewController,重写当前UIViewController的childViewControllerForStatusBarStyle方法,让childViewController的preferredStatusBarStyle生效(当前UIViewController的preferredStatusBarStyle就不会被调用了)。

简单来说,只要UIViewController重写的的childViewControllerForStatusBarStyle方法返回值不是nil,那么,UIViewController的preferredStatusBarStyle方法就不会被系统调用,系统会调用childViewControllerForStatusBarStyle方法返回的UIViewController的preferredStatusBarStyle方法。

-(void)setNeedsStatusBarAppearanceUpdate:

让系统去调用application.window的rootViewController的preferredStatusBarStyle方法,如果rootViewController的childViewControllerForStatusBarStyle返回值不为nil,则参考上面的讲解。

设置statusBar的【背景部分】

背景部分,简单来说,就是背景色;改变方法有两种:

系统提供的方法

navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色

注意:一旦你设置了navigationBar的-(void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色。

另辟蹊径

创建一个UIView,

设置该UIView的frame.size和statusBar大小一样,

设置该UIView的frame.origin为{0,-20},

设置该UIView的背景色为你希望的statusBar的颜色,

在navigationBar上addSubView该UIView即可。

33.Xcode7HTTP协议改为了HTTPS协议,导致应用不正常

解决方法:

在iOS9 beta1中,苹果将原http协议改成了https协议,使用TLS1.2 SSL加密请求数据。

在info.plist中添加

NSAppTransportSecurity

NSAllowsArbitraryLoads

34.如何让TableView滚动到顶端:

解决方法:

//两种滚动到顶部的方法都可以

//NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0];

//[_centerTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

[_centerTableView setContentOffset:(CGPoint){0,0} animated:YES];

35.UINavigationController中设置问题

解决方法:

只能在其中设置它的背景图。button和title在它对应的viewController中设置

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

推荐阅读更多精彩内容