Tag: cocoa touch

什么是BOOL *停止参数为enumerateObjectsUsingBlock:用于?

我一直在使用enumerateObjectsUsingBlock:最近我需要快速枚举,而且我很难理解BOOL *stop在枚举块中的用法。 NSArray类的引用状态 stop :对布尔值的引用。 该块可以将该值设置为YES以停止进一步处理该数组。 stop参数是一个唯一的参数。 您应该只在块中将此布尔值设置为YES 。 那么我当然可以在我的块中添加以下内容来停止枚举: if (idx == [myArray indexOfObject:[myArray lastObject]]) { *stop = YES; } 从我已经知道,不明确设置*stop为YES没有任何消极的副作用。 枚举似乎自动停止在数组的末尾。 那么使用*stop真的有必要在一个块?

在框架模块中包含非模块化头文件

我正在使用Xcode 6, 1)首先我要创build一个dynamic库(CoreLibrary)。 这个库包含RequestPoster.h文件。 2)然后我创build一个cocoa触摸框架,并添加了这个dynamic库(CoreLibrary)。 3)然后,这个框架添加到我的项目,它给RequestPoster.h文件(CoreLibrary)中的错误。 错误:在框架模块类中包含非模块化头文件: ifaddrs.h,arpa / inet.h,sys / types.h> 这些文件在项目中找不到。

如何使用第一个字符作为部分名称

我正在使用核心数据的表视图,我想使用我的每个结果的第一个字母作为部分标题(所以我可以得到部分索引的一面)。 有没有办法做到这一点的关键path? 像下面的东西,我用name.firstLetter作为sectionNameKeyPath (不幸的是,这是行不通的)。 我是否必须手动抓取每个结果的第一个字母并创build我的部分? 放置一个新的属性来放置第一个字母并将其用作sectionNameKeyPath吗? NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"name.firstLetter" cacheName:@"Root"]; 谢谢。 **编辑:**我不知道这是否有所作为,但我的结果是日语,按片假名sorting。 我想用这些片假名作为部分索引。

优点,问题,添加另一个UIWindow到iOS应用程序的例子?

最近我一直在想,一个iOS应用程序只有一个UIWindow的事实。 创build另一个UIWindow并将其放置在屏幕上似乎没有问题。 我的问题有点含糊,但我感兴趣的是: 我可以用第二个UIWindow实现其他方式无法完成的事情? 使用多个UIWindow实例时会出现什么问题? 我看到人们使用第二个UIWindow在iPhone上显示像视图一样的popup窗口。 这是做这件事的好方法吗? 为什么? 为什么不? 还有其他的例子,让另一个UIWindow变得非常有意义吗? 这不是我错过了什么。 我从来没有觉得需要创build另一个UIWindow实例,但也许它会允许做我不知道的惊人的事情! 🙂 我希望它可以帮助我解决这个问题:我需要添加一个“覆盖视图”,无论目前显示。 如果已经存在一个或多个模态控制器,它也应该工作。 如果我添加一个UIView到根控制器的视图,模式控制器坐在上面,所以popup控制器。 如果我以模态方式呈现封面视图,并且已经有模式控制器,则只覆盖屏幕的一部分。

比较两个NSString对象时,如果“a == b”为false

我有一个类的一个可访问的方法,传回一个NSString被调用。 [MyClass getMyString] 该类中的stringvariables实际上被分配在表的didSelectRowAtIndexPath:部分中,如下所示: myString = cell.textLabel.text; 当我通过调用该方法来检索string时,我将其分配给调用它的类中的另一个string,并将其与我定义的string进行比较 NSString *mySecondString; mySecondString = @"my value"; if(mySecondString == myString){ i = 9; } 我已经遍历代码,并且每次评估if语句时,都会跳过i=9并转到下一个else if语句。 为什么会这样? 为什么他们不评价是相同的价值? 如果你在debugging过程中将光标hover在每个值上,它们将显示它们具有相同的值,但是由于某种原因,代码没有如我所期望的那样执行,并将9赋给i 。 有什么想法吗?

比较date

你如何比较当前date和另一个date? 例如,Date1是1-10-2008 ,Date2是15-06-2009 。 我想知道Date1是未来date还是过去的date。

在UITextField外面的任何位置轻触键盘

我正在开发一个iPad应用程序,它有大量的UIViewControllers,UITableViews(带有UITextFields的附件的单元格)等等。许多UIViewController出现在导航层次结构中。 UITextFields有很多不同的地方,包括UITableViewCell accessoryViews。 我想制定一个有效的策略来解除键盘,只要用户触摸外面当前正在编辑的UITextField。 我已经search了键盘解雇技术,但还没有find解释一般的键盘解雇策略如何工作的答案。 例如,我喜欢这种方法,将以下代码添加到任何ViewController中: – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"* * * * * * * * *ViewControllerBase touchesBegan"); [self.view endEditing:YES]; // dismiss the keyboard [super touchesBegan:touches withEvent:event]; } …但是这种技术并不适用于在显示的UITableView内发生触摸的情况。 所以,我需要添加一些代码来调用endEditing当一个UITableView被触摸等,等等。这意味着我的应用程序将被大量的代码来解散键盘时,各种其他UIElements被触摸。 我想我可以尝试一下,找出所有需要拦截的键盘,而键盘被解散的地方,但在我看来,可能有更好的devise模式来处理iOS键盘解散事件。 任何人都可以分享他们在这个问题上的经验,并推荐一个特定的技术,一般处理整个应用程序的键盘解雇? 非常感谢

我怎样才能以编程方式暂停NSTimer?

我正在使用NSTimer在基于OpenGL的iPhone应用程序中进行一些渲染。 我有一个模式对话框popup并要求用户input。 当用户提供input时,我想暂停一下,比如: [myNSTimer pause]; 我正在使用这个语法,因为我一直在做这样的事情: [myNSTimer invalidate]; 当我想要停止。 我怎样才能以编程方式暂停NSTimer?

什么时候关联的对象被释放?

我通过关联引用将对象B附加到对象A.对象B通过KVO观察对象A的一些属性。 问题是对象B似乎在对象A 之后被释放,意味着它为时已晚,不能将自己作为对象A的KVO观察者移除。我知道这是因为我得到NSKVODeallocateBreakexception,然后EXEC_BAD_ACCESS在对象B的dealloc中崩溃。 有谁知道为什么对象B在OBJC_ASSOCIATION_RETAIN的对象A之后被释放? 关联对象是否在释放后被释放? 他们得到autoreleased? 有谁知道一种方法来改变这种行为? 我试图通过类添加一些东西到一个类,所以我不能覆盖任何现有的方法(包括dealloc),我不想特意搅乱。 在对象A被取消分配之前,我需要一些方法去关联和释放对象B. 编辑 – 这是我正在努力工作的代码。 如果关联的对象在UIImageView完全释放之前被释放,这将全部工作。 我看到的唯一的解决scheme是在我自己的dealloc方法中debugging,然后调用原来的方法来调用它。 那变得非常混乱。 ZSPropertyWatcher类的要点是KVO需要一个标准的callback方法,而且我不想replaceUIImageView,万一它自己使用。 的UIImageView + Loading.h @interface UIImageView (ZSShowLoading) @property (nonatomic) BOOL showLoadingSpinner; @end 的UIImageView + Loading.m @implementation UIImageView (ZSShowLoading) #define UIIMAGEVIEW_SPINNER_TAG 862353453 static char imageWatcherKey; static char frameWatcherKey; – (void)zsShowSpinner:(BOOL)show { if (show) { UIActivityIndicatorView *spinnerView = (UIActivityIndicatorView *)[self viewWithTag:UIIMAGEVIEW_SPINNER_TAG]; if […]

CaptiveNetwork弃用后,如何在iOS9中获取Wifi SSID,并且呼叫Wifi名称已被阻止

直到今天,我使用CaptiveNetwork接口来显示当前连接的Wifi的名称。 iOS 9预发布参考文件已经提到,CaptiveNetwork方法现在已经被剥夺了,但是它们仍然在开始工作。 苹果似乎已经阻止了这个电话的最新版本(也许是由于隐私问题?)。 有没有其他的方式来获得当前的Wifi的名称? 这是我直到今天获得SSID的方式,但现在你只能得到零: #import <SystemConfiguration/CaptiveNetwork.h> NSString *wifiName = nil; NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *name in interFaceNames) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name); if (info[@"SSID"]) { wifiName = info[@"SSID"]; } }