我有这样的枚举:
enum Environment {
case Production
case Staging
case Dev
}
Run Code Online (Sandbox Code Playgroud)
我想在NSUserDefaults中保存一个像这样的实例:
func saveEnvironment(environment : Environment){
NSUserDefaults.standardUserDefaults().setObject(environment, forKey: kSavedEnvironmentDefaultsKey)
}
Run Code Online (Sandbox Code Playgroud)
我知道Swift枚举不是NSObject,这使得它很难保存,但我不确定将它转换为可存储的东西的最佳方法是什么.
我有一个UIViewController被推到容器控制器然后弹出,并使用分配工具,我可以看到视图控制器后来被销毁.但是,从未达到控制器dealloc中的断点.有谁知道为什么没有调用dealloc?ARC可以在不调用dealloc的情况下销毁对象吗?
此外,我已经禁用了NSZombies(有些人说可以导致dealloc不能开火).
编辑:
Dealloc没有做太多,只是打印到控制台,它永远不会被调用:
- (void)dealloc
{
NSLog(@"Deallocating...");
}
我不能发布容器控制器 - 它是专有的,太复杂了.Dealloc在某些控制器上持续调用,而不是其他控制器.如果我能找到时间,我会尝试发布一个简化版本来重现问题.
有没有办法验证NSZombies是否被禁用?
EDIT2
我正在发布仪器截图; 它看起来像是正确的解除分配.

我想要这样的东西:
CGPoint a = CGPointMake(1, 1);
CGPoint b = CGPointMake(1, 1);
if ([CGHelperClass compareCGPoint:a to:b]){
//do something
}
Run Code Online (Sandbox Code Playgroud)
我知道写自己是微不足道的,但我很好奇它是否已经存在于某个地方.
我正在开发一个应用程序,当用户第一次开始使用UIAlert询问他们是否想要使用他们当前的位置时,会弹出UIAlert.这发生在主控制器内.但是,使用UIAlert时出现以下错误:
wait_fences: failed to receive reply: 10004003
Run Code Online (Sandbox Code Playgroud)
我调试了它,然后用Google搜索.我没有使用textarea或键盘输入,所以我不必辞职第一响应者.但是,我仍然无法弄清楚为什么我会收到此错误.它只在我添加UIAlert时出现.
MainController.m
- (void)viewDidLoad {
UIAlertView *mainAlert = [[UIAlertView alloc]
initWithTitle:@"Location"
message:@"Do you wish to use your current location?"
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"No Thanks", @"Sure!", nil];
[mainAlert show];
[mainAlert release];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
头文件的构造如下:
@interface MainController : UIViewController
<CLLocationManagerDelegate,
MKReverseGeocoderDelegate, UIAlertViewDelegate>
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
func foo(inout success: Bool) -> (()->()) {
return { _ in
success = true
print (success)
}
}
var success = false
let closure = foo(&success)
closure() //prints "true"
print(success) //prints "false"
Run Code Online (Sandbox Code Playgroud)
封闭似乎创造了一个成功的副本,并没有改变原来的.为什么会这样?我曾假设闭包会指向原始,因为我们传递的是inout变量.
我有一个共享扩展程序,可让您裁剪图像,然后将其上传到我们的服务.我们UIImageJPEGRepresentation在上传之前调用获取图像的数据,但由于内存过多而导致崩溃.这只发生在大型图像上,并且(据我们所知)在SE上,并且didReceiveMemoryWarning不会首先调用.使用"照片"应用时会发生这种情况.
无论如何要安全地打电话UIImageJPEGRepresentation,或者试图确定图像是否预先过大?
我正在制作一个时钟.我想通过将以太网电缆插入时钟来设置时钟.大多数情况下,时钟不会插入互联网.
我有一个Arduino板和一个以太网屏蔽,可以成功连接到时间服务器并读取时间(请参阅示例>以太网下的UdpNtpClient示例文件).
问题是,要配置以太网屏蔽,Ethernet.begin()如果屏蔽未连接到Internet ,则呼叫会阻塞60秒.我希望时钟告诉时间并定期检查它是否插有以太网电缆,如果有,请对时间进行任何更正.但是,大多数情况下,这种检查会产生负面结果,因此我每次都不能让时钟冻结60秒.
是否可以检测电缆是否以比Ethernet.begin()功能更快的方式连接?是否有可能编写一个"多线程"解决方案,哪里Ethernet.begin()是非阻塞的?
当我使用photoshop的"Save for Web"调整图像大小时,它看起来与我使用ImageMagick转换它的方式不同.我可以在ImageMagick中更改设置以获得与Photoshop相同的结果吗?这是一个例子.
原本的:

"拯救网络"30.01%
vs
convert -geometry 30.01% home-button-full.png home-button-ipad.png

放大,以便更容易看出差异:
Photoshop中:

ImageMagick的:

我有一个NSManagedObject.当我创建一个实例时,它意外地失败了isKindOfClass方法.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DayModel" inManagedObjectContext:context];
DayModel *day = [[DayModel alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
if ([day isKindOfClass:[DayModel class]]) {
NSLog(@"True");
} else {
NSLog(@"False");
}
Run Code Online (Sandbox Code Playgroud)
输出:
False
Run Code Online (Sandbox Code Playgroud)
我添加了以下代码:
Class objectClass = [day class];
Class classClass = [DayModel class];
Run Code Online (Sandbox Code Playgroud)
在调试器中查看它,这是我发现的:

打印classClass打印"DayModel" 的描述.
我不确定这是否相关,但DayModel是在Swift中实现的.
UPDATE
这在我的测试类中失败了,但在iOS应用程序中没有.问题似乎与此问题类似.但是,我已经将所有类都添加到了测试目标中,但它仍然失败了.
ios ×4
iphone ×2
objective-c ×2
swift ×2
android ×1
arduino ×1
core-data ×1
ethernet ×1
imagemagick ×1
ios5 ×1
photoshop ×1
restkit ×1
uialertview ×1