小编Dan*_*552的帖子

为什么Objective-C使用头文件而不是像Java这样的单文件类?

我主要在Java工作,最近我正在尝试学习用于Mac和iOS应用开发的Objective-C.现在,这种语言与我习惯,指针,消息等完全不同,但我似乎正好接受它.这不是一个编码问题,但我宁愿熟悉我正在处理的事情,而不仅仅是知道"它必须是这样的,因为它就是这样".

为什么Objective-C语言需要头文件?它们与.m文件分开的实际目的是什么?为什么函数需要在头文件中声明而不是刚刚实现?它只是其中一个没有从旧语言中消失的东西,还是与Java的单文件类相比有真正的优势?

java objective-c header-files

14
推荐指数
3
解决办法
3960
查看次数

OpenGL ES 2D - z排序,深度缓冲与按顺序绘制

我是OpenGL的新手,很抱歉,如果这是一个愚蠢的问题.也不知道它是否有所作为,以防万一,我正在使用OpenGL ES 1.1.

目前我按纹理顺序绘制精灵,因为我读过它对性能更好(有意义).但现在我想知道这是否是正确的方法因为我需要某些精灵在他人面前而不管纹理.

据我所知,我的z排序选项是启用深度缓冲区并使用它,或者切换绘图顺序,以便按照az值的顺序绘制精灵.

我已经读过深度缓冲区可能会受到影响,但改变顺序也是如此.我该怎么办?

iphone opengl-es objective-c ios

9
推荐指数
1
解决办法
3526
查看次数

未找到Cocoapods podspec依赖项导入文件

我正在尝试制作一个依赖于另一个的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 foundCocoapodB中的导入试图包含它的地方.

我已经尝试过阅读Podspec文档,但我并没有真正得到我所缺少的东西.我也试过了s.library = 'CocoapodA'.

cocoa build objective-c cocoapods

7
推荐指数
1
解决办法
4320
查看次数

iOS编译库/框架链接器标记问题是设备编译而不是模拟器

背景:

我正在尝试使用带有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 …

xcode build ios cocoapods cordova

7
推荐指数
1
解决办法
1655
查看次数

覆盖类类别中的属性设置器

我有一个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似乎是不可能的.

objective-c ios

6
推荐指数
1
解决办法
3671
查看次数

UITableViewCell没有从故事板加载子视图

我觉得这里发生了一些奇怪的事情.我有一个原型单元格,其中有一些标签作为子视图,并且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)

objective-c uitableview ios

6
推荐指数
1
解决办法
1573
查看次数

Android Activity,如何用Java代码覆盖manifest的android:configChanges?

我正在编写一个自定义的Activity类(使用它作为我的其他Activity类的超类),它覆盖了许多默认功能.我想要的其中一个功能是定向处理,虽然我能做到,但它需要

android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)

在清单中.有没有办法强制执行与上面一行相同的操作,但是在java代码中?

android android-manifest android-orientation

5
推荐指数
1
解决办法
5672
查看次数

在UINavigationController推送和弹出后,UIScrollView子项跳转

所以我UIScrollView在我的iPad应用程序上有一个子视图(它本身是所有控件的父级).滚动一切正常.旋转工作正常(整个视图适合纵向,在风景上滚动).一旦推出一个新的屏幕UINavigationController,然后回来打破它.

看起来滚动视图的子框架相对于滚动位置向上移动,但滚动视图保持在底部(整个子视图向上移动).

我已经尝试Constraints在故事板上进行战斗了几个小时,并且无法解决可能导致这种情况的原因.

怎么开始 导航和返回后的样子

xcode interface-builder uiscrollview ios xcode-storyboard

5
推荐指数
1
解决办法
1012
查看次数

UIScrollView contentInset不起作用

我遇到的问题是contentInset不能使用UIScrollView来使用键盘弹出窗口.它有点工作:由于某种原因,我需要大数(可能高于视图的高度?)它可以做任何事情,尽管所有文档都contentInset显示小数字40.0(如条形码)或键盘高度.

我通过以下步骤在一个全新的应用程序上重现了这个问题:

  1. 使用Xcode新项目创建新的单一视图应用程序
  2. 在故事板上,拖动滚动视图,填充完整视图大小
  3. 在故事板上,拖动按钮,位于屏幕的最底部(在滚动视图内)
  4. 将scrollview链接到ViewController中的新属性
  5. 将按钮链接到ViewController中的方法
  6. 按下按钮的方法设置contentInset

以下是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)

我缺少什么/为什么我需要大数字?

iphone objective-c uiscrollview uikit ios

5
推荐指数
1
解决办法
9566
查看次数

使用格式的NSString定义方法

如何在自己的类中定义一个接受带格式的NSString的方法?

我看到使用它像一些不同的东西NSLog,[NSPredicate predicateWithFormat:(NSString *)predicateFormat, ...]当然[NSString stringWithFormat:(NSString *)format, ...]

此外,在头文件中,NSLog和stringWithFormat在声明后具有以下内容: NS_FORMAT_FUNCTION(1,2).谷歌搜索告诉我这意味着什么并没有多大帮助.

显然省略号是格式参数,但我不知道如何在方法本身中处理它们.

objective-c ios

4
推荐指数
1
解决办法
2283
查看次数

Ruby 生成过程,捕获 STDOUT/STDERR,同时表现得就像定期生成一样

我想要实现的目标:

  • 从 Ruby 进程生成子进程
  • 子进程应正常打印回终端。我所说的“正常”是指该过程不应错过颜色输出,或忽略用户输入(STDIN)。
  • 对于该子进程,将 STDOUT/STDERR (联合)捕获到例如子进程终止后可以访问的字符串变量中。转义字符等等。

通过传递不同的 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)

ruby io subprocess pty

2
推荐指数
1
解决办法
1302
查看次数