官方文档说可以在python代码中使用自定义块,但是您需要创建元数据.我还没有找到它的一个例子.
我的问题是如何创建,使用和分发自定义块的元数据.
例
@interface SomeClass
- (void)doSomethingWithCompletion: (void (^)(SomeObject *obj, NSError *error))myBlock;
@end
def pythonMethod():
def completion(obj, error):
# staff
foo = SomeClass.new()
foo.doSomethingWithCompletion_(somehow_pass_completion)
Run Code Online (Sandbox Code Playgroud)
问题是somehow_pass_completion
应该如何以及如何提供元数据myBlock
.
我想找出一种在Xcode(或者更一般地说,任何Cocoa文本编辑器)中具有键绑定的方法,它将删除(向左或向右,取决于键绑定)连续的空格而不删除任何非空白字符或换行符.
对于left-whitespace-delete,我认为逻辑是:
"如果克拉左边有一个非空格或换行符,则不做任何操作,否则删除克拉左边的所有连续空白字符,使克拉紧跟第一个非空格 - 或 - 左边的换行符."
显然,我也想要一致的正确操作版本.
在一个理想的世界里,我想要一个关于换行的更复杂/更聪明的行为,(可能删除只包含空格的连续行)但我会先解决这个简单的行.
我有QuicKeys,我并不害怕使用它.:)我也愿意自己写一些东西,如果有人对如何在运行时修补这样的行为有任何想法 - 这种行为在我的系统上的所有Cocoa文本编辑器中工作都是非常优秀的.
我对运行emacs,vi,vim,pico,nano,WordStar或任何其他文本编辑器不感兴趣.如果解决方案无法在Xcode4中运行,那对我来说不是解决方案.
我正在使用带有1GB内存的32位CentOS VPS上的MongoDB.它大部分时间都可以正常工作,但是它的内存使用率不时出现高峰并且崩溃了我的服务器.
有没有办法防止这种情况,例如,通过限制MongoDB守护程序使用的内存和CPU?
我正在考虑运行Mongo守护进程ionice
并给它一个低优先级,但我不确定这是否会起作用.
欢迎任何帮助或指示!
我想在绘图应用程序中对图形上下文执行撤消操作.按下撤消时,我想移动到包含旧图形的上一个上下文.
例如:
我在上下文中有一个矩形.在拖动时,我将矩形移动到新位置并重绘它.现在,当我按下撤消按钮时,我想将矩形移动到上一个位置.我怎样才能做到这一点?
我只是基本的想法NSUndoManager
.
请帮忙!
谢谢.
我已将下面的代码放在AppDelegate中,但是当我再次启动应用程序时,我注意到值仍然保存(Not NULL).这是为什么?
代码:
- (void)applicationWillTerminate:(UIApplication *)application
{ [[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"roomCat"];
[[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"TFA"];
[[NSUserDefaults standardUserDefaults]
setObject:NULL forKey:@"comments"];
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
从10.7上标准的基于Xcode文档的应用程序w/CoreData模板开始,我遇到了一些令人沮丧的行为.我确信这是一件很简单的事情.
让我们说在我的NSPersistentDocument子类中,我有这样的东西,连接到窗口中的一个按钮:
- (IBAction)doStuff:(id)sender
{
NSEntityDescription* ent = [[self.managedObjectModel entitiesByName] valueForKey: @"MyEntity"];
NSManagedObject* foo = [[[NSManagedObject alloc] initWithEntity: ent insertIntoManagedObjectContext: self.managedObjectContext] autorelease];
[self.managedObjectContext save: NULL];
}
Run Code Online (Sandbox Code Playgroud)
如果我创建一个新文档并单击该按钮,我将收到以下错误:This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.
我得到了这个.我们还没有保存,没有持久的商店.说得通.
现在让我说我把它分成两个动作,连接到不同的按钮,如下:
- (IBAction)doStuff:(id)sender
{
NSEntityDescription* ent = [[self.managedObjectModel entitiesByName] valueForKey: @"MyEntity"];
NSManagedObject* foo = [[[NSManagedObject alloc] initWithEntity: ent insertIntoManagedObjectContext: self.managedObjectContext] autorelease];
}
- (IBAction)doOtherStuff:(id)sender
{
[self.managedObjectContext save: NULL];
}
Run Code Online (Sandbox Code Playgroud)
如果我创建一个新文档并按下第一个按钮,那么在按下该按钮后的某个不确定时间(弄脏文档),自动保存将自动保存并自动保存文档,这将在临时位置创建一个商店.如果我按下第二个按钮,则没有投诉(因为现在有一个商店.)
我需要我的文档能够从一开始就进行managedObjectContext保存.我在后台线程上踢了一些东西,我需要后台上下文的保存操作(和通知),以便将后台线程所做的更改合并到主线程的managedObjectContext中.
我想过尝试强制自动保存,但自动保存过程看起来完全异步,所以我必须跳过箍来禁用任何可能导致managedObjectContext保存的UI交互,直到第一次自动保存操作完成.
我还考虑创建一个内存存储来弥补创建新文档和第一次自动保存之间的差距,但是我不清楚如何将内存存储区中的内容迁移到磁盘存储区并同步删除内存存储区.首次自动保存操作.
任何人对我如何处理这个有任何想法?
我是Grand Central Dispatch的忠实粉丝,我最近一直在关注这一dispatch_io_*
系列的电话.很容易看出这个API如何对网络I/O(慢速,高延迟)有用.也就是说,存在dispatch_io_create_with_path
某种意味着在本地文件系统上使用.(是的,我知道路径也可以指向远程网络文件系统上的资源,但无论如何......)在使用它时,我发现dispatch_io_*
与使用简单的阻塞相比,使用似乎带来了相当大的开销I/O调用(read
,write
,等).这种减速似乎主要来自内核同步原语,用作块在队列之间来回编组.在我一直在玩的示例工作负载中(非常多的I/O界限),减速可能差到10次.首先,它似乎dispatch_io
永远不会成为chatty(小颗粒)I/O的胜利.
我认为,在具有单个本地物理存储卷的单个机器的常见情况下,I/O请求将在设备级别有效地序列化.从那里,我发现自己有这两个想法:
dispatch_io
则无法使您的磁盘更快地为您提供数据.从那里开始,我认为这个API的最佳位置可能就在中间 - 这是一个在CPU受限和I/O限制之间徘徊的工作量,但此时我有点想到自己陷入困境,所以我想我会问StackOverflow.
我将接受第一个回答,它描述了具有这些前提条件的"真实世界"工作流程(即单机,单个本地物理磁盘),使用它们dispatch_io
可以显着提高性能.
到目前为止,我已经阅读了GCD的文档,但是似乎错过了dispatch_cancel(),我想用它来取消所有调度的块调用.有没有办法实现dispatch_cancel()?
简短版本:我有一个master
分支,人们正在努力并承诺.然后我有一个分支master
,称之为foo
人们也正在努力并承诺.我想定期将一些但不是全部的变化foo
带回来master
.我希望有一些方法master
可以查询历史记录是否存在提交foo
.这似乎有问题.我该怎么做呢?
长版:创建一个像这样的git repo示例:
cd /tmp && mkdir gitrepo && cd gitrepo/ && git init
echo "Something shared" > myFile.txt && git add myFile.txt && git commit -m "Added myFile.txt to master"
git checkout -b foo master
echo "Something else shared" > anotherFile.txt && git add anotherFile.txt && git commit -m "Added anotherFile.txt to foo"
echo "Something specific to foo" > foochange.txt && git add …
Run Code Online (Sandbox Code Playgroud) 我有一堆USB串口设备(准确地说是这些:http://plugable.com/products/PL2303-DB9),如果可能的话,我想在拔出插头时"跟踪"它们重新插入事件(即使重新插入事件是针对不同的USB端口).
驱动程序似乎从其USB位置创建了BSD dialin/callout/tty设备名称,但这取决于您将其插入的USB端口.
看着插入两个独立的USB端口的两个相同的设备之间由于IOKit属性词典,唯一的区别是在sessionID
,USB Address
,locationID
,portNum
或在出现的值从所导出的locationID
.sessionID
似乎每个会话都会发生变化(即每次拔出/重新插入后都会有所不同).
由于这些设备都返回0
了iSerialNumber
,我觉得我基本上这里拧,但我想我会折腾出在这里,看看是否有人有任何想法.是否有一些通用设施可以将一些"令牌"写入我可以读回的USB设备?我在USB标准的快速浏览/谷歌搜索中没有看到任何内容,但是像这样的设施肯定会做到这一点......
有任何想法吗?
当你创建一个 kqueue 时,kqueue()
你会得到一个文件描述符。但看来这个文件描述符不能用 进行有意义的轮询select()
。我知道轮询/读取 a 的标准kqueue()
方法是 withkevent(...)
但我正在尝试与一些使用select()
.
这里的目标是能够触发可以通过select
基于此的轮询机制检测到的“用户事件”(即使该事件最终需要kevent()
稍后使用“消耗”)。EVFILT_USER
这看起来像是天生要做的事情,但快速实验表明select()
,当在 kqueue 中添加(并触发)事件时,不会将 kqueue 的 fd 报告为已准备好读取,它只是超时(或阻塞)永远)。(但是等效的kevent()
调用确实会看到/返回该事件。)
难道我做错了什么?或者是不可能用 轮询 kqueue 的 fd select()
?
我有NSTableView
一个复选框列和一个NSArrayController
.
将NSTableView
被绑定到NSArrayController
以显示其内容.复选框列绑定到imgArrayController.arrangedObjects.check1
.程序启动时,数组为空.我以这种方式在循环中使用arrayController添加值:
[imgArrayController addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[NSImage imageNamed: [NSString stringWithFormat:@"%@" ,fileName]], @"image",
[NSString stringWithFormat:@"%@" ,fileName], @"filename",
@"YES", @"check1",
nil]];
Run Code Online (Sandbox Code Playgroud)
添加了正确的行数,但是当我尝试将复选框设置为YES时出现错误.这是我得到的错误:
2013-02-03 19:11:46.357 Stockuploader[561:303] Error setting value for key path check1 of object {
} (from bound object <NSTableColumn: 0x100152280> identifier: check1): [<__NSDictionaryI 0x10010c190> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key check1.
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解我做错了什么吗?行显示在表格内,但它们都是空的.
我试图辨别是否有可能将双精度IEEE浮点值分解为两个整数,并在以后以完全保真度重新组合它们.想象一下这样的事情:
double foo = <inputValue>;
double ipart = 0;
double fpart = modf(foo, &ipart);
int64_t intIPart = ipart;
int64_t intFPart = fpart * <someConstant>;
double bar = ((double)ipart) + ((double)intFPart) / <someConstant>;
assert(foo == bar);
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,任何64位数量都可以存储在128位中(即只存储文字位.)这里的目标是将整数部分和double的小数部分分解为整数表示(与API接口)其存储格式我无法控制)并在重新组合两个64位整数时返回一个精确的双精度数.
我对IEEE浮点有一个概念性的理解,我得到的是双精度存储base-2.我凭经验证明,采用上述方法,有时foo != bar
甚至是非常大的值<someConstant>
.我已经离开学校一段时间了,我不能完全理解这个循环,理解这是否可能给出不同的基础(或其他因素).
编辑:
我想这是在我的大脑中隐含/理解但未在此捕获:在这种情况下,我保证问题中双重的总体幅度将始终在+/- 2 ^ 63(和> 2 ^ -64)之内.根据这种理解,整数部分保证适合64位int类型,然后我的期望是小数精度为~16位,小数部分也应该很容易在64位int类型中表示.