小编iDe*_*per的帖子

如何检查NSTimer是否已经失效

我有一个NSTimer对象,如果用户点击按钮或退出视图,我需要使其无效.

所以我有:

[myNSTimer invalidate];
Run Code Online (Sandbox Code Playgroud)

在我的按钮处理程序内部viewWillDisappear.如果用户点击按钮然后存在视图,则应用程序会抛出异常,因为myNSTimer已经失效.我在该viewWillDisappear方法中需要做的是检查是否myNSTimer已经失效.我怎么做?

我试过了:

if(myNSTimer != nil)
  [myNSTimer invalidate];
Run Code Online (Sandbox Code Playgroud)

但那没用.

iphone cocoa-touch objective-c nstimer ios

12
推荐指数
2
解决办法
2万
查看次数

将图像添加到navigationItem的标题

我想在导航栏上的标题左侧添加一个徽标.title属性似乎只采用NSString.将图像添加到导航栏的最佳方法是什么?

iphone cocoa-touch objective-c uinavigationbar ios

10
推荐指数
1
解决办法
1万
查看次数

剥离iPhone应用程序的符号

Xcode中有哪些设置可以剥离iphone应用程序的符号?

我在Xcode中使用这些设置,但仍然使用二进制文件编辑器在可执行文件中看到类名和它们的方法.

部署:

1)部署后处理(已检查)

2)复制期间剥离调试符号(选中)

3)剥离链接产品(已选中)

4)使用单独的带(已选中)

链接:

5)死代码剥离(已检查)

GCC 4.0 - 代码生成

6)生成调试符号(未选中)

xcode symbols objective-c strip ios

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

在UIView中居中标签

将标签置于中心的最佳方法是UIView什么?如果你做的事情如

UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(view.frame.origin.x / 2, view.frame.origin.y / 2, 50.0, 50.0)];
Run Code Online (Sandbox Code Playgroud)

然后,您将标签的原点设置为视图的中心.最好的选择是使用center属性将视图的中心设置为该点.所以我尝试使用以下代码:

UIView *aView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
aView.backgroundColor = [UIColor darkGrayColor];
CGRect frame = aView.frame;

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 125.0f, 30.0f)];
[aLabel setCenter:CGPointMake(frame.origin.x / 2, frame.origin.y / 2)];
Run Code Online (Sandbox Code Playgroud)

这会产生一个标签,它几乎超出了左上角视图的范围.

iphone cocoa-touch objective-c uilabel ios

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

无法为 gradle 项目创建 JAR 文件

我想创建一个可以在 AWS 上上传的 jar 文件,但每次gradle jar从命令提示符运行命令时都会收到以下错误。

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or -- 
debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org
Run Code Online (Sandbox Code Playgroud)

每当我gradle clean在命令提示符下运行时,我都会收到“构建成功”。这是build.gradle的内容:

> Task :compileJava …
Run Code Online (Sandbox Code Playgroud)

dependencies jar gradle spring-boot fatjar

8
推荐指数
2
解决办法
3万
查看次数

如何将UIView移动到"底部"以便显示下一个UIView?

我想从超级视图中"删除"UIView并在最后添加它...但是在属于superview的其余UI视图的"底部".

这可能吗?

任何帮助非常感谢!

iphone cocoa-touch objective-c uiview ios

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

如何将OCMock对象与调用isKindOfClass的代码一起使用?

我想用OCMock测试一些代码.

代码的内部是调用[NSObject isKindOfClass]我提供给代码的模拟对象,如下所示:

if ([object isKindOfClass:[FancyClass class]]) { ...}
Run Code Online (Sandbox Code Playgroud)

但是,当我提供如下所示的基于OCMockObject的模拟时:

mock = [OCMockObject mockForClass:[FancyClass class]];
Run Code Online (Sandbox Code Playgroud)

它似乎没有通过isKindOfClass测试.

有什么建议?

iphone cocoa cocoa-touch objective-c ios

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

复制UITableViewCell

我正在tableView:cellForRowAtIndexPath:从nib文件中读取自定义表格单元格.这对我的目的很有用,除非它很慢.

现在,我知道从长远来看,正确的做法是在代码中完全创建单元格,并使用单个视图,依此类推.但这是一个原型,我不想付出那么多努力.

现在,如果我在UIViewController子类中只读取一次nib ,然后tableView:cellForRowAtIndexPath:复制它,我会很高兴.我的假设是复制比读取笔尖更快.

这是我用来加载笔尖的东西,我从viewDidLoad:(和retain之后)调用

-(id)loadFromNamed:(NSString*)name {
    NSArray *objectsInNib = [[NSBundle mainBundle] loadNibNamed:name
                                                          owner:self
                                                        options:nil];
    assert( objectsInNib.count == 1 );
    return [objectsInNib objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好.但问题是:我如何反复复制?它甚至可能吗?

我试过[_cachedObject copy][_cachedObject mutableCopy],但UITableViewCell不支持任何一份协议.

如果必须的话,我可以告诉他们忽略速度,直到我准备完全取下笔尖,但如果这里有一个低悬的水果,我宁愿让它快一点.

有任何想法吗?

iphone cocoa-touch objective-c uitableview ios

7
推荐指数
2
解决办法
8580
查看次数

自动释放范围

我想知道自动删除是如何在iPhone上运行的.我知道,一旦你向对象发送自动释放,它就会被保留,直到autorelease被发送的块的范围结束.那是对的吗?

我在applicationDidFinishLaunching下面的NIB中初始化一个视图:

    (void)applicationDidFinishLaunching:(UIApplication *)application {

    loginViewController = [[[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil] autorelease];

    [window addSubview: [loginViewController view]];
    [window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)

并且视图根本没有显示,屏幕上的所有内容都是 UIWindow

现在,一旦我autorelease从控制器初始化中删除了所有内容,从那里开始顺利进行.

这是关于什么的?

干杯,K.

xcode cocoa cocoa-touch objective-c ios

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

从现有NSArray创建新NSArray的标准惯例是什么?

比方说,我有一个NSArrayNSDictionaries是10个元素长.我想NSArray用每个字典上的单个键的值创建第二个.我能想到的最好方法是:

    NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
    for (NSDictionary *p in array) {
        [nameArray addObject:[p objectForKey:@"name"]];
    }
    self.my_new_array = array;
    [array release];
    [nameArray release];
}
Run Code Online (Sandbox Code Playgroud)

但理论上,我应该能够避免使用可变数组并使用计数器[nameArray addObjectAtIndex:count],因为新列表应该与旧列表完全一样长.请注意,我不是要尝试过滤原始数组的子集,而是创建一个具有完全相同数量的元素的新数组,只需要从数组中每个元素的某个任意属性中挖掘出来的值.

在python中,可以像这样解决这个问题:

new_list = [p['name'] for p in old_list]
Run Code Online (Sandbox Code Playgroud)

或者如果你是一个受虐狂,像这样:

new_list = map(lambda p: p['name'], old_list)
Run Code Online (Sandbox Code Playgroud)

在objective-c中必须稍微明确一点,这让我想知道是否有一种公认的处理这些情况的常用方法.

xcode cocoa cocoa-touch objective-c ios

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