小编Ste*_*her的帖子

Objective-C dynamic_cast?

是否存在与C++的dynamic_cast相当的Objective-C?

它可以用这个伪造:

MyClass *safeObject = [object isKindOfClass: [MyClass class]]
                      ? (MyClass *)originalObject : nil;
Run Code Online (Sandbox Code Playgroud)

但即使我不需要经常输入,也需要输入很多代码.

我有点生疏,所以这可能不太正确,但我相信C++中的等价物将是:

MyClass safeObject = dynamic_cast<MyClass>(orginalObject);
Run Code Online (Sandbox Code Playgroud)

这里的上下文是一个块,其中参数被定义为更通用的类的类型,但在这个块中我"知道"它是一个特定的子类.尽管如此,我不想盲目地抛弃它(MyClass *)originalObject而忽略理论上可能出现的错误.

要明确的是,虽然我喜欢a dynamic_cast,但我也很乐意采用另一种方法来安全地处理这种情况.

objective-c

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

检测TestFlight?

我更喜欢使用与TestFlight和App Store相同的构建配置.有没有办法在运行时检测应用程序是否已通过TestFlight或App Store安装?(我的想法是,takeOff如果没有通过App Store安装,我只会打电话.)

我想避免在App Store版本中使用TestFlight来保护我的用户的隐私,并避免这里讨论的网络的潜在脱轨.

app-store ios testflight

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

来自app delegate的故事板视图控制器?

我有一个视图控制器子类,SignInViewController用于登录,可能随时需要.而不是让我的应用程序中的每个视图控制器都听取需要登录的通知,我宁愿让应用程序代理执行此操作.

但是如何从我的应用代表中触发它呢?

我把它SignInViewController放在我的主要故事板中吗?如果是这样,我如何从我的应用代表访问我的故事板?还是其他一些方法更好?

ios uistoryboard

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

NSOperationQueue何时开始其第一次操作?

我已经创建了一个测试项目,我正在测试我的假设,NSOperationNSOperationQueue在我的主项目中使用它们之前.

我的代码非常简单,所以我将在这里包含所有内容.这是在启用ARC的情况下使用命令行Foundation项目.

Operation.h

#import <Foundation/Foundation.h>

@interface Operation : NSOperation

@property (readwrite, strong) NSString *label;

- (id)initWithLabel: (NSString *)label;

@end
Run Code Online (Sandbox Code Playgroud)

Operation.m

#import "Operation.h"

@implementation Operation

- (void)main
{
    NSLog( @"Operation %@", _label);
}

- (id)initWithLabel: (NSString *)label
{
    if (( self = [super init] )) {
        _label = label;
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

的main.m

#import <Foundation/Foundation.h>
#import "Operation.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        queue.maxConcurrentOperationCount = …
Run Code Online (Sandbox Code Playgroud)

cocoa cocoa-touch nsoperationqueue

11
推荐指数
1
解决办法
8896
查看次数

从getsectbyname崩溃读取字节

更新:回答下面的问题,感谢格雷格帕克的指针......

我在这里上传了一个示例项目,但我也会对其进行描述:https://github.com/tewha/getsectbyname-crash

我从我的(仅64位)可执行文件中崩溃,但从Xcode运行时却没有.但是,如果我从终端仪器运行它,它会崩溃.

不是 Debug vs. Release配置问题; 在终端中运行Debug可执行文件也崩溃了.从Xcode运行Release可执行文件.

我正在尝试从Mach-O可执行文件中读取一个链接到app的可执行部分CREATE_INFOPLIST_SECTION_IN_BINARY = YES.

const struct section_64 *plistSection = getsectbyname("__TEXT", "__info_plist");
NSLog(@"Found a section %s, %s", plistSection->segname, plistSection->sectname);
void *ptr = ((void *)plistSection->addr);
uint64_t size = plistSection->size;

NSLog(@"It has %zd bytes at %tx", size, plistSection->addr);
NSLog(@"Allocating %zd bytes", size);
void *buffer = malloc(size);
NSLog(@"Moving %zd bytes", size);
NSLog(@"(Crashes when doing the memmove.)");
memmove(buffer, ptr, size);
NSLog(@"Freeing %zd bytes", size);
free(buffer); …
Run Code Online (Sandbox Code Playgroud)

macos mach-o

11
推荐指数
1
解决办法
631
查看次数

iPhone,如何在代码中将我的日期选择器最小日期设置为今天?

我需要在代码中将我的日期选择器最小日期设置为今天吗?

iphone datepicker ios

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

有条件地链接@autoreleasepool

当我尝试在iOS 4.3模拟器(Xcode 4.2)中运行我的应用程序时,当我点击@autoreleasepool {}时,我崩溃了:

dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush
Run Code Online (Sandbox Code Playgroud)

我环顾四周,看到解决方法是添加libarclite_iphoneos.a.这也是模拟器的一个版本,如libarclite_iphonesimulator.a.

我需要将两个库添加到我的项目中,以使其在模拟器和硬件上运行.但无论我构建哪个,它都会抱怨另一个库是针对不受支持的架构的.

例如,为模拟器构建:

ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture
i386 in file
Run Code Online (Sandbox Code Playgroud)

我如何同时修复这两个?或者我NSAutoreleasePool现在应该坚持使用旧语法?

cocoa-touch binary-compatibility ios4 ios5

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

为什么不调用applicationShouldOpenUntitledFile?

applicationShouldOpenUntitledFile向我的应用程序委托添加了一个方法,返回NOApple的文档指定.但是,我仍然在启动时获得一份新文档.怎么了?

@implementation AppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog( @"This is being called" );
}

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
{
    NSLog( @"This never is" );
    return NO;  
}

@end
Run Code Online (Sandbox Code Playgroud)

macos cocoa appkit

9
推荐指数
2
解决办法
1771
查看次数

自定义"想要联系人"提示?

有没有办法自定义我的应用程序尝试访问通讯簿时显示的提示?

我想补充说明我使用的数据,以及为什么需要它.

abaddressbook ios ios6

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

iOS上的NSThread号码?

当您打印NSThread的描述时,您会得到如下内容:

<NSThread: 0x1e511b70>{name = (null), num = 1}
Run Code Online (Sandbox Code Playgroud)

这个"数字"是否以某种方式可用?

这仅用于调试,因此无需清除Apple的批准过程.

debugging nsthread ios

9
推荐指数
2
解决办法
4479
查看次数