NSError需要一个域,我理解它可以分割错误代码的范围.
人们会预料到某个地方存在domain.error代码的注册表,但我无法发现它.
据说这可以用于查找错误的本地化描述.
有没有人有任何已知的最佳实践来处理错误域和代码?权威参考(主要开发人员或框架制造商)是最佳的,但即使是详细描述良好惯例的博客也是有用的.
在您的项目中,您是否维护错误域/代码的注册表,这些注册表映射到基于域/代码的错误对象的本地化描述,恢复,众所周知的userinfo密钥或类似工厂?
或者你通常只是拼凑一些域和一些代码,并依赖于众所周知的用户信息密钥,如NSLocalizedDescriptionKey等,在你的定制NSError域?
这不是一个风格问题.它更多的是正确使用语言本身.我对编程很新,而且我对Objective-C和Cocoa完全不熟悉,但在阅读了该语言并查看了一些示例代码后,一些使用模式继续弹出,对我来说没有意义.或者说,在我看来,它们似乎并不是最优的.我希望你们都能帮助教育我正确使用其中一些语言结构.
接口与协议
我理解与抽象相关的接口和实现的概念.然而,我在Objective-C示例代码中看到的主导模式如下......
@interface Foo : NSObject
{
some ivars decls
}
some methods decls
@end
Run Code Online (Sandbox Code Playgroud)
Foo* f = [[Foo alloc] init];
Run Code Online (Sandbox Code Playgroud)
@protocol Foo <NSObject>
some methods
maybe some properties
@end
@interface FooProvider : NSObject
+ (FooProvider*) sharedProvider;
- (id<Foo>) fooWithBlahBlah;
@end
Run Code Online (Sandbox Code Playgroud)
id<Foo> f = [[FooProvider sharedProvider] fooWithBlahBlah];
[f whatever];
Run Code Online (Sandbox Code Playgroud)
@interface Foo : NSObject
{
some ivars decls
}
some methods decls
@end
Run Code Online (Sandbox Code Playgroud)
Foo* f = [[Foo alloc] init];
Run Code Online (Sandbox Code Playgroud)
@protocol Foo <NSObject>
some methods
maybe some properties
@end
@interface FooProvider …
Run Code Online (Sandbox Code Playgroud) 假设我有两个手指触摸iPhone的屏幕,但只有一个正在移动.
TouchesMoved只显示一个手指(事件).
我如何知道TouchesMoved的两个手指中的哪一个?
在我开发应用程序的过程中,我一直关注的是图像和视图组件的硬编码几何图形,它们理所当然地认为当前显示器代的320x480性质.
我在StackOverflow和示例/教程中看到了很多答案,它们在屏幕尺寸上进行了硬编码.我已经为尺寸为320x480的背景制作了一些纹理,但我们小心翼翼地将它们设为UIViewContentModeScaleToFill,但我并不完全肯定IB中的像素定位会导致硬件特定的接口.
在某些时候,我想(并希望!)iPhone将具有不同的显示分辨率.
你是开发商计划的吗?
您将来如何处理可变屏幕分辨率?
(当然假设有人想要超过640kb,哦对不起,320x480分辨率:))
请参阅此URL:http: //developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html#//apple_ref/doc/uid/TP40007072-CH10
对于Apple4的iOS4答案.
我正在导航视图层次结构的上下文中切换视图,并且我希望能够在切换时确定在新视图下推送的先前视图是什么.
我在UINavigationControllerDelegate中尝试这个:
(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
NSLog( @"Switching from %@ to %@",
NSStringFromClass( [[navigationController visibleViewController] class] ),
NSStringFromClass( [viewController class] )
);
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
2009-08-05 20:05:21.274 App Name [85913:20b]从ManagementScreen切换到ManagementScreen
不幸的是,似乎在调用"will"之前,它已经在UINavigationController的状态中被换出,这样传入的viewController总是与UINavigationController上的visibleViewController相同(以及topViewController属性,这里没有演示,但我试过了它用相同的代码).
我想避免扩展导航视图控制器,老实说,虽然我可以轻松地在委托上放置一个属性 - 但是我想知道在现有框架内是否可以实现这种行为(似乎应该在它发生之前调用发生在之后,但似乎导航控制器的状态在之前被修改过).
谢谢!
我正在尝试使用XCode 3.2.3为iPhone应用程序设置单元测试.
我按照http://developer.apple.com/iphone/library/documentation/xcode/conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html中的步骤进行操作.
尽我所能,但我在尝试构建时收到此错误消息:"((yourApplicationDelegate)!= nil)"应该是真的.UIApplication未能找到AppDelegate
(这是USE APPLICATION UNIT TEST的默认琐碎测试是真的)
我正在构建我的应用测试目标,如文档中所述,并得到此错误.
我是否需要确保我的所有非测试用例源都在我的测试包中?
困惑
-
我将源文件包含到我的项目中并且编译得很好,但它仍然遇到相同的单元测试错误:
"((yourApplicationDelegate)!= nil)"应该是真的.UIApplication未能找到AppDelegate
原始代码与模板代码相同:
-(void) testAppDelegate {
id yourApplicationDelegate = [[UIApplication sharedApplication] delegate];
STAssertNotNil(yourApplicationDelegate, @"UIApplication failed to find the AppDelegate");
}
Run Code Online (Sandbox Code Playgroud) 从我的理解,呼唤
NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]);
Run Code Online (Sandbox Code Playgroud)
为您提供设备的本地时区.它给我的是"US/Central",我在[NSTimeZone abbreviationDictionary]的缩写列表中找不到任何地方,或者[NSTimeZone knownTimeZoneNames]中的时区名称列表.这个来自哪里?我需要将当前设备时区传递给Rails应用程序,它理解"澳大利亚/悉尼"或"美国/芝加哥"之类的内容,但不了解"US/Central".
我如何获取localTimeZone给我的内容并将其转换为Rails可以理解的字符串(即knownTimeZoneNames中的任何时区,它应该是系统知道的所有时区名称?)
Apple基础套件中是否提供了适当的结构来表示离散坐标系?我知道我可以只使用NSPoint的积分组件,按惯例保持它离散,甚至可以定义我自己的组件.
但是,如果已经有一个正确输入的我会更喜欢并避免隐式/显式类型的肮脏.
iphone ×6
objective-c ×6
cocoa-touch ×4
cocoa ×3
coding-style ×1
multi-touch ×1
nserror ×1
nstimezone ×1
syntax ×1
unit-testing ×1
xcode ×1