我试图在Cocoa中找到一些方法来从文件扩展名转换为统一类型标识符.也就是说,我想找到一些方法:
".jpg" => "public.jpeg"
".html" => "public.html"
".ttf"=> "public.truetype-font"
Run Code Online (Sandbox Code Playgroud)
我搜索过NSWorkspace文档但找不到任何内容.我能得到的最接近的是:
- (NSImage *)iconForFileType:(NSString *)fileType
Run Code Online (Sandbox Code Playgroud)
返回文件扩展名的图标,和
– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
Run Code Online (Sandbox Code Playgroud)
这与我正在尝试的完全相反.你们中的任何人都知道怎么做吗?
我真的希望我不必手动检查很多扩展.
提前致谢.
我想知道:是否有系统调用,库,内核模块或命令行工具,我可以用来存储磁盘上正在运行的程序的完整状态?
那就是:我想将进程当前正在使用的内存,页面布局,堆栈,寄存器,线程和文件描述符完全转储到硬盘驱动器上的文件中,并能够在以后无缝地恢复它,就像模拟器"savestate" "或虚拟机"快照".
如果可能的话,我还想拥有程序状态的多个"备份副本",因此如果程序由于某种原因而死,我可以恢复到先前的执行点.
这可能吗?
我正在尝试NSTask使用Cocoa中的标准错误读取数据waitForDataInBackgroundAndNotify.以下代码确实读取了流,因此它已经部分工作了.
我遇到的问题是,有时NSFileHandleDataAvailableNotification开始重复启动(每秒数千次),根本没有新数据([data length]返回0).然后我的进程开始使用大量CPU,使机器停止运转.你们中的任何人过去曾经打过这样的事吗?提前致谢.
/**
* Start reading from STDERR
*
* @private
*/
- (void)startReadingStandardError {
NSFileHandle *fileHandle = [_task.standardError fileHandleForReading];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(errorData:)
name:NSFileHandleDataAvailableNotification
object:fileHandle];
[fileHandle waitForDataInBackgroundAndNotify];
}
/**
* Fired whenever new data becomes available on STDERR
*
* @private
*/
-(void) errorData: (NSNotification *) notification
{
NSFileHandle *fileHandle = (NSFileHandle*) [notification object];
NSData *data = [fileHandle availableData];
if ([data length]) {
// consume data
}
[fileHandle …Run Code Online (Sandbox Code Playgroud) 我在使用可可开发的应用程序中偶然发现了一个问题。我需要做一些处理,并且我在一个单独的线程上进行。我这样做是为了可以使用 NSProgressIndicator 显示进度,而不是挂起主线程。(如果用户愿意,可以取消执行)。
它几乎工作完美,但有一个问题:处理过程会产生大量文件,如果这些文件中的一个或多个已经存在,我想询问用户是否可以在实际执行此操作之前覆盖它们。所以我尝试从处理线程使用 NSRunAlertPanel() 。
有时它会起作用。其他时候,警报面板会闪烁,在我点击它之前无特殊原因关闭,或者根本不出现。所以我认为 NSRunAlertPanel() 可能不是线程安全的,这是由于竞争条件而发生的。
我想知道:除了使用计时器不断轮询处理线程以了解主线程的进度之外,还有什么方法可以解决此问题?
从主线程以外的任何线程使用 GUI 本质上是不安全的吗?
提前致谢。
编辑:我正在按照马克的指示进行操作,但仍然有问题,因为我的 NSAlerts (我现在也在使用)仍然消失。这是我的处理线程。
- (void)doProcess:(id)param
{
// ...
[self performSelectorOnMainThread:@selector(askForConfirmation) withObject:nil waitUntilDone:YES];
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后在我的主线程上:
- (void)askForConfirmation
{
[[NSAlert alertWithMessageText:@"Test." defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"Testing."] runModal];
}
- (IBAction)startProcessing:(id)sender
{
// ...
[NSThread detachNewThreadSelector:@selector(doProcess:) toTarget:self withObject:nil];
// ...
}
Run Code Online (Sandbox Code Playgroud) 我想知道git中是否有以下内容:
假设我有以下历史:
A---B---C---D---E master
\
W---X---Y topic
Run Code Online (Sandbox Code Playgroud)
我想将主题分支中所做的所有更改合并回master,但不保留提交历史记录.也就是说,而不是:
A---B---C---D---E---F master
\ /
W---X---Y topic
Run Code Online (Sandbox Code Playgroud)
我想有以下历史:
A---B---C---D---E---F master
Run Code Online (Sandbox Code Playgroud)
凡F被新的主分支,它等效于提交所做的修改提交W,X,Y,应用的一次.
我还希望能够保持主题分支的完整性:
A---B---C---D---E---F master
\
W---X---Y topic
Run Code Online (Sandbox Code Playgroud)
这可能吗?我一直在使用git rebase进行一些测试,但到目前为止它还没有按照我需要的方式运行.
提前致谢.
cocoa ×3
objective-c ×3
asynchronous ×1
branch ×1
disk ×1
git ×1
macos ×1
nsfilehandle ×1
nstask ×1
process ×1
restore ×1
state ×1
store ×1
uti ×1