在Cocoa中,何时应该使用NSAssert,NSException,NSError?
这就是我一直在想的:
NSAssert - 在创建任何用于程序员自身利益的客户端程序时,可以仔细检查规则,约定,假设或前置条件和后置条件?
NSException - 为了使用该库的其他程序员的利益创建第三方库,以便他们立即知道输入何时无效?
NSError - 当与外部系统连接以获取不保证给我结果的文件,数据库或Web服务等数据时?
所以我使用testflightapp来分发ad-hoc构建.
但我不断收到此消息:'无效的配置文件:分发构建权利必须将get-task-allow设置为false.
我的应用程序没有权利文件,因此XCode会自动生成一个并将其包含在构建中.我解压缩App.ipa并打开embedded.mobileprovision文件并查看权利字典.
它看起来像这样:
<key>Entitlements</key>
<dict>
<key>application-identifier</key>
<string>E9PBH9V8TB.*</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>E9PBH9V8TB.*</string>
</array>
</dict>
Run Code Online (Sandbox Code Playgroud)
之前有其他人经历过吗?我不明白为什么我会收到这个错误.
Swift问题是有一种方法可以使用一个具有相关值的案例的枚举类型.
我有一个API,它提供了可用的过滤器,它不太可能,但API可能会添加其他过滤器类型.因此,如果API发送未知的过滤器类型,我希望保留与枚举相关联的信息.
以下是我对此做出的不同想法.
我的前两次尝试没有编译.我的第三次尝试感觉有点笨重.
有没有人有更好的方法这样做?你认为我不应该使用enum来解决这个问题吗?
typealias APIFilterIdentifier = String
/* Does Not Compile */
enum EnumTestAssociatedValeu: APIFilterIdentifier {
case Unknown(APIFilterIdentifier)
case Everyone = "everyone"
case Team = "myteam"
}
/* Does not compile */
enum EnumTestDefaultAssociatedValues: APIFilterIdentifier {
case Unknown(APIFilterIdentifier)
case Everyone(APIFilterIdentifier = "everyone")
case Team(APIFilterIdentifier = "myteam")
}
/* Compiles but is there a better way? */
enum EnumTestWithCustomInit {
case Unknown(APIFilterIdentifier)
case Everyone
case Team
init(filterIdentifier: APIFilterIdentifier) {
let everyone: APIFilterIdentifier = EnumTestWithCustomInit.everyoneFilterIdentifier
let team: APIFilterIdentifier = EnumTestWithCustomInit.teamFilterIdentifier …
Run Code Online (Sandbox Code Playgroud) 我在互联网上看起来很讨论在Cocoa中创建游戏循环.我见过的大多数游戏循环使用NSTimer每隔60秒触发一次事件.为什么似乎没有使用Grand Central Dispatch的示例,例如下面Apple开发人员文档的源代码.有一个我不知道的问题吗?
dispatch_source_t CreateDispatchTimer(uint64_t interval,
uint64_t leeway,
dispatch_queue_t queue,
dispatch_block_t block)
{
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,
0, 0, queue);
if (timer)
{
dispatch_source_set_timer(timer, dispatch_walltime(NULL, 0), interval, leeway);
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
}
return timer;
}
Run Code Online (Sandbox Code Playgroud) 因此Drupal 6的一个麻烦就是将更改从开发服务器移动到测试或登台服务器到生产服务器是很困难的.
这在Drupal 7中变得更容易了吗?模块开发人员现在应该遵循一些编码约定吗?那么开发人员可以轻松地分离内容和配置,只在dev,test和prod之间移动配置?
背景: 在Objective-C中,我将创建包含调试信息的断言:
NSAssert(poetCount > 5, "Expected poetCount > 5; Actual: %d", poetCount);
Run Code Online (Sandbox Code Playgroud)
但是,assert
Swift中的全局函数似乎不允许这样,因为message参数是一个StaticString.所以我不能这样做:
assert(NSFileManager.defaultManager().fileExistsAtPath(fullpath),
"Expected: File to Exist @ \(fullpath)")
Run Code Online (Sandbox Code Playgroud)
问题:是否存在assert
不需要静态字符串的替代函数,或者NSAssert
如果我想提供额外信息以使调试更容易,我应该继续使用吗?
Objective-C有如下指令:
我想到了像复杂的marco或代码生成器这样的东西.是否可以为代码生成目的创建自定义指令?一种可能的用途是为CoreData生成方法.
我没想到,因为我从来没有见过任何关于它的东西,但我的世界不是世界.
后续问题:
Jonathan在下面提到可以编写自己的预处理器,这就引出了问题.目前,#define SYMBOLIC_CONSTANT 102将在文件移动到编译器之前将字符SYMBOLIC_CONSTANT的所有实例替换为文件中的字符102.
我知道XCode你可以在Targets构建过程中添加"Run Script Phase".因此,我可以编写一个脚本来查找我的自定义预处理指令,如'$ coredata',然后让脚本生成一个新文件,其中字符$ coredata替换为某些代码字符.但根据我对XCode构建过程的理解,您无法将更改的文件提供给Compiler Sources阶段.这些文件由IDE指定并锁定.
有没有人做过类似的事情?我知道外部构建系统是可能的,但说实话,我不是那么理解.我不知道Build and Run按钮的技术细节.
与此同时,我将开始阅读Apple的XCode文档......
谢谢你的回复!
背景资料:
我在example.com上有一个Window VPS.我有它运行IIS和SQL Server.我有一个适用于IIS的example.com证书.我想使用相同的SQL Server证书来允许与客户端的加密连接.SQL Server配置管理器不会在下拉列表中显示证书.
我认为问题是SQL Server认为证书无效,因为SQL Server认为服务器名称与证书(example.com)不匹配.
如何检查SQL Server认为服务器名称是什么?如果错了,我该怎么改呢?
我的程序中有以下视图层次结构设置.
Window
+ContentView (Subview of Window)
++MyCustomView (Subview of ContentView)
++MyCustomOpaqueView (Subview of ContentView)
+++TextField (Subview of MyCustomOpaqueView)
Run Code Online (Sandbox Code Playgroud)
当用户单击TextField时,其中的光标开始闪烁.在每次闪烁时,在MyCustomView上调用drawRect.没什么大不了的,但我想知道为什么?
在MyCustomOpaqueView中,我实现了isOpaque,
- (BOOL)isOpaque {return YES;}
Run Code Online (Sandbox Code Playgroud)
如果传递给drawRect的NSRect被一个不透明的视图完全遮挡,我认为这会阻止消息传递给MyCustomView中的drawRect,但是当光标闪烁时,MyCustomView仍然会发送一个完全在不透明视图后面的NSRect的drawRect消息.
我错过了一个关键概念还是闪烁光标的怪癖?
因此,我正在使用的API有时会在请求失败时在响应正文中发送错误消息.它位于response.data
.有时它是JSON,有时它是一个字符串.我使用的validate
方法,以便result.value
为nil
发生错误时.
有没有办法让Alamofire将数据从NSData序列化为字符串,或者让JSON [ String : AnyObject ]
像响应成功一样?
我想继续使用validate方法.
编辑:这是我在Alamofire GitHub项目上开始的功能请求的链接.
objective-c ×4
cocoa ×2
swift ×2
alamofire ×1
appkit ×1
assert ×1
conventions ×1
drupal ×1
drupal-6 ×1
drupal-7 ×1
enums ×1
macos ×1
sql-server ×1
ssl ×1
testflight ×1
xcode ×1