self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable" 原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句话会被转换成: [[self view] frame] 也就是说,实际上这是消息传递。 而frame属性是一个CGRect结构,所以frame.size.height是C语言的语法,就是访问CGRect结构中的size字段,同样,height是CGSize结构的一个字段。所以,你这句话实际上等于: [[self view] frame].size.height = 100f; 而Objective-C只是对C语言的一个扩展,所以,上面这句话会被转成C语言的函数调用形式,类似于这种形式: getframe().size.height = 100f; 而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。 所以,解决办法就是,用一个临时变量保存这个函数的返回值,修改这个临时变量,然后再赋给frame: // 1. 用一个临时变量保存返回值。 CGRect temp = self.view.frame; // 2. 给这个变量赋值。因为变量都是L-Value,可以被赋值 temp.size.height = 100f; // 3. 修改frame的值 self.view.frame = temp; |
self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable"
时间: 2024-10-27 02:54:27
self.view.frame.size.height = 100f; 这样写没法通过编译,编译器会报错"expression is not assignable"的相关文章
OC中 self.view.frame.size.height = 100; 不能通过编译的原因
在OC中,当需要修改一个view的尺寸时,通常是通过先将 self.view.fram赋值给一个临时变量,然后修改临时变量,最后将临时变量赋值给 self.view.frame.代码如下: 1 // 1. 用一个临时变量保存返回值. 2 CGRect temp = self.view.frame; 3 4 // 2. 给这个变量赋值.因为变量都是L-Value,可以被赋值 5 temp.size.height = 100f; 6 7 // 3. 修改frame的值 8 self.view.fra
Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this); QFileInfo fileinfo(appUrl); QString appPath = QApplication::applicationDirPath()+SAVEDIR+"/"+fileinfo.fileName(); bool res = proce
Jsoncpp写“鱘”的json数据,报错。
最近在用Json::FastWriter生成json数据时,发现一个问题.含有"鱘"字的json字段会多出一个斜杠,不知道是不是编码的问题. C++要使用JSON来解析数据,一般采用jsoncpp. 网站:http://sourceforge.net/projects/jsoncpp/ 经过json校验http://jsonlint.com/,报错 很是郁闷.现在只能从生成的字符串想办法了. 遍历生成的字符串,删除"\". 生成json数据成功! Jsoncpp写&
<;c:choose>;标签内出错。不能写注解,否则就会报错
org.apache.jasper.JasperException: Validation error messages from TagLibraryValidator for c in /WEB-INF/views/modules/fdzapp/combineCostList_Wf.jsp 113: Illegal text inside "c:choose" tag: "<!-- 状态...". at org.apache.jasper.compiler
C#复习笔记(4)--C#3:革新写代码的方式(用智能的编译器来防错)
用智能的编译器来防错 本章的主要内容: 自动实现的属性:编写由字段直接支持的简单属性, 不再显得臃肿不堪: 隐式类型的局部变量:根据初始值推断类型,简化局部变量的声明: 对象和集合初始化程序:用一个表达式就能创建和初始化对象: 隐式类型的数组:根据内容推断数组的类型,从而简化数组的创建过程: 匿名类型:允许创建新的临时类型来包含简单的属性: 自动实现的属性 这个特性简单的我都不想描述,但是为了保持内容的完整性,放一张图: 和匿名方法还有迭代器一样,它在编译器的帮助下会生成一个后备字段. 自动实现
FFMPEG more samples than frame size (avcodec_encode_audio2) 
的解决方案
在实际的项目中,从音频设备采集到的音频的类型和编码器类型(aac ,amr)通常是不一致的. 那么我们首先需要做重采样的过程.利用swr_convert 重新采样. 这时候我们可能会遇到另外一个问题.就是在encode_audio的时候遇到 more samples than frame size (avcodec_encode_audio2) 的问题. 问题的原因在于 我们编码器的frame_size 比采集到的fram->nb_samples小 [cpp] view plaincopy /
[UIScreen mainScreen].bounds.size.height获取的数值不变的问题解决
一.问题 [UIScreen mainScreen].bounds.size.height获取的数值永远是固定的,不会根据不同屏幕尺寸的苹果手机而改变 二.原因 这是因为,苹果系统在监测到[email protected]这个后,才会调用屏幕尺寸函数. 因此,搞ios开发,一定要加上这张图片才行. 版权声明:本文为博主原创文章,未经博主允许不得转载.
OpenCV报错size.width>;0 &;&; size.height>;0 in function
(1)错误代码 import cv2 as cv src = cv.imread("D:\images\我喜欢的发型\07.PNG") cv.namedWindow("Hello", cv.WINDOW_AUTOSIZE) cv.imshow("Hello", src) cv.waitKey(0) cv.destoryAllWindows() (2)错误描述 D:\DevKits\Anaconda3\python.exe D:/workspace
line 352 Error: Assertion failed (size.width>;0 &;&; size.height>;0) in cv::imshow
OpenCV 使用 createtrackerbar()报错问题 Error Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file c:\build\master_winpack-build-win64-vc15\opencv\modules\highgui\src\window.cpp, line 352 原因 先上图把 这个问题困扰我几个小时,其实是因为多次imshow一张图造