我主要在Java工作,最近我正在尝试学习用于Mac和iOS应用开发的Objective-C.现在,这种语言与我习惯,指针,消息等完全不同,但我似乎正好接受它.这不是一个编码问题,但我宁愿熟悉我正在处理的事情,而不仅仅是知道"它必须是这样的,因为它就是这样".
为什么Objective-C语言需要头文件?它们与.m文件分开的实际目的是什么?为什么函数需要在头文件中声明而不是刚刚实现?它只是其中一个没有从旧语言中消失的东西,还是与Java的单文件类相比有真正的优势?
我是OpenGL的新手,很抱歉,如果这是一个愚蠢的问题.也不知道它是否有所作为,以防万一,我正在使用OpenGL ES 1.1.
目前我按纹理顺序绘制精灵,因为我读过它对性能更好(有意义).但现在我想知道这是否是正确的方法因为我需要某些精灵在他人面前而不管纹理.
据我所知,我的z排序选项是启用深度缓冲区并使用它,或者切换绘图顺序,以便按照az值的顺序绘制精灵.
我已经读过深度缓冲区可能会受到影响,但改变顺序也是如此.我该怎么办?
我正在尝试制作一个依赖于另一个的Cocoapod但我在编译时遇到问题.在这种情况下说MyApp使用的是CocoapodA和CocoapodB,B依赖于A.
MyApp Podfile:
platform :ios, '5.0'
pod 'CocoapodA'
pod 'CocoapodB', :path => '../../CocoapodB'
Run Code Online (Sandbox Code Playgroud)
CocoapodB Podspec:
s.dependency 'CocoapodA'
但是当我尝试编译时,我得到'CocoapodA/CocoapodA.h' file not found
CocoapodB中的导入试图包含它的地方.
我已经尝试过阅读Podspec文档,但我并没有真正得到我所缺少的东西.我也试过了s.library = 'CocoapodA'
.
我正在尝试使用带有cocoapods的Phonegap.Phonegap已经存在从命令行编译的问题所以我只是将Xcode与生成的项目文件一起使用(并且在使用cocoapods时我无论如何都必须这样做).
我用我的问题向Github推送了一个复制的空项目:https: //github.com/Dan2552/phonegap-reproducable-issue
您可以build_ios
在repo的根目录中的脚本中创建一个简单的全新Phonegap应用程序后看到我所做的步骤.但是我也推高了生成的项目文件(platforms/ios),所以没有Phonegap的人应该能够打开项目.
编译时我遇到了一个奇怪的问题.可能与预先捆绑的Cordova库和cocoapods有关.
在使用Phonegap生成项目并添加cocoapods之后,在没有做任何事情的情况下构建时,我收到以下错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_OTPublisher", referenced from:
objc-class-ref in libPods.a(OpenTokPlugin.o)
"_OBJC_CLASS_$_OTSession", referenced from:
objc-class-ref in libPods.a(OpenTokPlugin.o)
"_OBJC_CLASS_$_OTSubscriber", referenced from:
objc-class-ref in libPods.a(OpenTokPlugin.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
Cocoapods警告:
[!]目标
HelloWorld [Debug]
覆盖OTHER_LDFLAGS
`Pods/Pods.xcconfig'中定义的构建设置.[!]目标
HelloWorld [Debug - Release]
覆盖OTHER_LDFLAGS
`Pods/Pods.xcconfig'中定义的构建设置.
因此我尝试完全删除OTHER_LDFLAGS
(Xcode中的"其他链接标志")条目.这可以在iOS设备上成功编译,但不能在模拟器上编译,项目也不会在存档上构建.
构建模拟器将获得与之前相同的错误(Undefined …
我有一个NSManagedObject
类,我想覆盖一个setter,但我被告知最好不要修改自动生成的类文件并创建类别而是扩展它们(因为如果你更改模型并重新生成文件,你失去了所有的补充).
如果我在类别中为setter创建一个方法,它肯定会运行该方法(使用NSLog测试),但我不知道如何分配实际的属性值.通常,我会使用合成属性
@synthesize finished = _finished;
这样我就可以使用setter访问setter中的属性_finished
,如下所示:
- (void)setFinished:(NSNumber *)finishedValue {
_finished = finishedValue;
self.end_time = [NSDate date];
}
Run Code Online (Sandbox Code Playgroud)
但是在这里定义属性NSManagedObject
似乎是不可能的.
我觉得这里发生了一些奇怪的事情.我有一个原型单元格,其中有一些标签作为子视图,并且viewWithTag
尝试找到它们来设置文本.我在同一个项目中已经完成了3次,所以我迷失了可能是错的.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Result Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
UILabel *racerNameLabel = (UILabel*) [cell viewWithTag:5002153];
//more labels ...
return cell;
}
Run Code Online (Sandbox Code Playgroud)
如果我输入断点,racerNameLabel为nil且单元格没有子视图:
(lldb) po [[cell contentView] subviews]
(id) $5 = 0x08161da0 <__NSArrayI 0x8161da0>(
)
Run Code Online (Sandbox Code Playgroud)
这是故事板本身的一个噱头,显示标签子视图应该绝对存在.它还显示了单元标识符是否正确.
<tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="Result Cell" rowHeight="80" id="hGh-MB-iBH">
<rect key="frame" x="0.0" y="22" width="382" height="80"/>
<autoresizingMask key="autoresizingMask"/>
<view key="contentView" opaque="NO" …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个自定义的Activity类(使用它作为我的其他Activity类的超类),它覆盖了许多默认功能.我想要的其中一个功能是定向处理,虽然我能做到,但它需要
android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)
在清单中.有没有办法强制执行与上面一行相同的操作,但是在java代码中?
所以我UIScrollView
在我的iPad应用程序上有一个子视图(它本身是所有控件的父级).滚动一切正常.旋转工作正常(整个视图适合纵向,在风景上滚动).一旦推出一个新的屏幕UINavigationController
,然后回来打破它.
看起来滚动视图的子框架相对于滚动位置向上移动,但滚动视图保持在底部(整个子视图向上移动).
我已经尝试Constraints
在故事板上进行战斗了几个小时,并且无法解决可能导致这种情况的原因.
我遇到的问题是contentInset
不能使用UIScrollView来使用键盘弹出窗口.它有点工作:由于某种原因,我需要大数(可能高于视图的高度?)它可以做任何事情,尽管所有文档都contentInset
显示小数字40.0
(如条形码)或键盘高度.
我通过以下步骤在一个全新的应用程序上重现了这个问题:
以下是ViewController的代码:
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@end
@implementation ViewController
- (IBAction)button:(id)sender {
self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 600, 0.0);
}
@end
Run Code Online (Sandbox Code Playgroud)
我缺少什么/为什么我需要大数字?
如何在自己的类中定义一个接受带格式的NSString的方法?
我看到使用它像一些不同的东西NSLog
,[NSPredicate predicateWithFormat:(NSString *)predicateFormat, ...]
当然[NSString stringWithFormat:(NSString *)format, ...]
此外,在头文件中,NSLog和stringWithFormat在声明后具有以下内容:
NS_FORMAT_FUNCTION(1,2)
.谷歌搜索告诉我这意味着什么并没有多大帮助.
显然省略号是格式参数,但我不知道如何在方法本身中处理它们.
我想要实现的目标:
通过传递不同的 IO 管道可以捕获 STDOUT/STDERR,但是子进程可以检测到它不在tty
. 例如git log
,不会打印影响文本颜色的字符,也不会使用其寻呼机。
使用 apty
启动进程本质上是“欺骗”子进程,使其认为它是由用户启动的。据我所知,这正是我想要的,而且其结果基本上满足了所有要求。
我测试解决方案是否满足我的需求的一般测试是:
ls -al
正常吗?vim
正常吗?irb
正常吗?以下 Ruby 代码可以检查以上所有内容:
to_execute = "vim"
output = ""
require 'pty'
require 'io/console'
master, slave = PTY.open
slave.raw!
pid = ::Process.spawn(to_execute, :in => STDIN, [:out, :err] => slave)
slave.close
master.winsize = $stdout.winsize
Signal.trap(:WINCH) { master.winsize = $stdout.winsize }
Signal.trap(:SIGINT) { ::Process.kill("INT", pid) }
master.each_char do |char|
STDOUT.print …
Run Code Online (Sandbox Code Playgroud) ios ×7
objective-c ×7
build ×2
cocoapods ×2
iphone ×2
uiscrollview ×2
xcode ×2
android ×1
cocoa ×1
cordova ×1
header-files ×1
io ×1
java ×1
opengl-es ×1
pty ×1
ruby ×1
subprocess ×1
uikit ×1
uitableview ×1