我一直在使用新的Social.Framework,特别是SLRequest,它们都可以在iOS 6及更高版本上使用.事实上,我在尝试发布此类请求时遇到的崩溃让我感到非常惊讶.
我一直在使用Facebook和Twitter帐户崩溃,这就是为什么我知道它与其中一个特定问题无关.它必须与ACAccount对象相关,我以这种方式得到它:
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
//iOS 6
if (_twitterEnabled) {
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
//Set up account
[accountStore requestAccessToAccountsWithType:accountTypeTwitter options:nil completion:^(BOOL granted, NSError *error) {
if (granted && !error) {
//Get account and get ready to post.
NSArray *arrayOfAccounts = [accountStore accountsWithAccountType:accountTypeTwitter];
if ([arrayOfAccounts count] > 0) {
_twitterAccount = [arrayOfAccounts lastObject];
}
}
}];
}
}
if (!_facebookEnabled) {
ACAccountType *accountTypeFacebook = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
NSArray *permissions = @[@"user_about_me",@"user_likes",@"email"];
NSMutableDictionary *options = [NSMutableDictionary dictionaryWithObjectsAndKeys:kFacebookAppIDString, ACFacebookAppIdKey, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用统一类型标识符的应用程序.具体来说,我正在调用UTTypeCreateAllIdentifiersForTag()并传递各种MIME类型.
我希望这个功能(不同于UTTypeCreatePreferredIdentifierForTag())将给我最具体的UTI以及它所符合的所有UTI.这似乎不是这种情况 - 它要么返回单个UTI,要么辅助UTI是虚假的.
UTTypeConformsTo()在同一个头文件中定义了函数,但我更喜欢一个返回此UTI符合的所有类型的数组的函数.
对我来说似乎有希望,因为这MDItemCopyAttributeList()将返回这样的清单.也就是说,它需要一个MDItemRef,可以从文件路径或URL创建 - 这不是很好.有时我的数据只存储在内存中,我只有一个MIME类型.
我是否必须遍历UTI的整个数据库以获取此信息,或者我是否遗漏了某些内容?
我有一个要求,我需要下载多媒体组件的二进制文件,但当我访问BinaryContentData类暴露的属性时,没有属性下载图像文件.虽然对于上传文件,Core Service也有一个属性UploadFromFile.
那么有没有办法将二进制文件下载到临时位置.以下是我使用的代码:
core_service.ServiceReference1.SessionAwareCoreService2010Client client = new SessionAwareCoreService2010Client();
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName";
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword"; client.Open();
ComponentData component = (ComponentData)client.TryCheckOut(
multimediaComponentURI, new ReadOptions());
BinaryContentData binaryData = component.BinaryContent;
Run Code Online (Sandbox Code Playgroud)
请建议.
AFAIK CFHost提供OS X(和iOS)上唯一的用于DNS解析的公共API,它是异步和/或可以取消(因此可以实现自定义超时).所有其他API都是同步的,无法取消,因此每次DNS查询都需要浪费一个线程才能使操作异步或停止运行(即使是Grand Central Dispatch也会在每个查询中浪费一个线程,您只需创建线程即可你自己).每个DNS解析调用有一个阻塞线程(并且这样的调用可以阻塞相当长的时间,在我的系统上,超时是在调用最终超时前30秒),如果你需要解析大量的DNS,真的不是一种方法主机名.
CFHost对我来说似乎是一个很好的工作.它可以同步使用,在这种情况下文档说阻塞请求可以从另一个线程取消,它可以异步使用,在这种情况下请求在后台运行,如果需要也可以取消,但它在成功或自然超时之前不会阻止任何线程.内部CFHost使用getaddrinfo_async_*函数,但这不是公共API,据我所知,这些函数是私有的,不应该直接使用它们.
所以这里有一段简单的代码我CFHost用cancel 来测试查找,但它没有按预期工作,我不明白为什么.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <dispatch/dispatch.h>
#include <CoreServices/CoreServices.h>
int main (int argc, char ** argv ) {
CFHostRef host;
dispatch_time_t timeout;
CFAbsoluteTime startTime;
dispatch_queue_t timeoutQueue;
startTime = CFAbsoluteTimeGetCurrent();
host = CFHostCreateWithName(kCFAllocatorDefault, CFSTR("www.apple.com"));
assert(host);
timeout = dispatch_time(DISPATCH_TIME_NOW, 5 * 1000 * 1000 * 1000ull);
timeoutQueue = dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT, 0
);
assert(timeoutQueue);
dispatch_after(timeout, timeoutQueue,
^{
printf("%u: Timeout limit reached, canceling.\n", …Run Code Online (Sandbox Code Playgroud) 给定一个没有修饰符的键的键代码,我想产生按shift +键的结果.示例:对于标准美国键盘,<shift> + <period>给出>.
相关的功能是UCKeytranslate,但我需要一些帮助来获得正确的细节.下面的代码片段是一个完整的程序,可以在XCode中运行.该程序的目的是给出<period>来产生字符>.
该计划的结果是:
Keyboard: <TSMInputSource 0x10051a930> KB Layout: U.S. (id=0)
Layout: 0x0000000102802000
Status: -50
UnicodeString: 97
String: a
Done
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)
获得布局的部分似乎正在工作,但状态代码显示出现了问题.但是什么?
import Foundation
import Cocoa
import Carbon
import AppKit
// The current text input source (read keyboard) has a layout in which
// we can lookup how key-codes are resolved.
// Get the a reference keyboard using the current layout.
var unmanagedKeyboard = TISCopyCurrentKeyboardLayoutInputSource()
var keyboard = unmanagedKeyboard.takeUnretainedValue() as TISInputSource
print("Keyboard: ") …Run Code Online (Sandbox Code Playgroud) 我没有看到FSPathMoveObjectToTrashSync()没有关注链接的功能选项.
这是我尝试过的
创建链接和文件
[ 21:32:41 /tmp ] $ touch my_file
[ 21:32:45 /tmp ] $ ln -s my_file my_link
[ 21:32:52 /tmp ] $ la
total 8
drwxrwxrwt 12 root wheel 408 17 Maj 21:32 .
drwxr-xr-x@ 6 root wheel 204 9 Sep 2009 ..
-rw-r--r-- 1 neoneye wheel 0 17 Maj 21:32 my_file
lrwxr-xr-x 1 neoneye wheel 7 17 Maj 21:32 my_link -> my_file
Run Code Online (Sandbox Code Playgroud)
将链接移动到垃圾箱
OSStatus status = FSPathMoveObjectToTrashSync(
"/tmp/my_link",
NULL,
kFSFileOperationDefaultOptions
);
NSLog(@"status: %i", (int)status);
Run Code Online (Sandbox Code Playgroud)
输出是 …
我需要在Mac OS X上获取已安装本地卷的列表.以前,Cocoa类NSWorkspace有一个获取此类卷的挂载点数组的mountedLocalVolumePaths方法.从Lion开始,现在已经弃用了这个,在文档中没有提示我们应该使用什么.
我发现提供此信息的唯一其他Apple特定API是CoreServices.framework中的FSGetVolumeInfo函数.如果你通过此列举了已安装卷kFSInvalidVolumeRefNum的卷参数和1..1的volumeIndex.它HFSUniStr255通过volumeName输出参数返回卷名(作为a ),通过rootDirectory输出参数返回挂载点作为a FSRef,然后可以使用转换为URL CFURLCreateFromFSRef().
这似乎有点复杂和不必要的低级别.
也存在BSD级的功能,getfsstat()并且getmntinfo()其中两个发射的阵列statfs结构.API似乎比核心服务版本更健全.
我应该使用更高级别的替代品吗?
JXA具有内置的 ObjC 桥接器,Foundation可通过对象自动从框架公开枚举和常量$;例如:
$.NSUTF8StringEncoding // -> 4
Run Code Online (Sandbox Code Playgroud)
但是,较低级别 API 中也有一些CFString不会自动导入的有用常量,即定义常用UTIkUTType*值的常量,例如UTI 。CoreServiceskUTTypeHTML"public.html"
虽然您可以使用 导入它们ObjC.import('CoreServices'),但它们的字符串值无法(轻松)访问,大概是因为它的类型是CFString[Ref]:
ObjC.import('CoreServices') // import kUTType* constants; ObjC.import('Cocoa') works too
$.kUTTypeHTML // returns an [object Ref] instance - how do you get its string value?
Run Code Online (Sandbox Code Playgroud)
我还没有找到一种方法来获取返回内容的核心
字符串ObjC.unwrap($.kUTTypeHTML):不起作用,也不起作用ObjC.unwrap($.kUTTypeHTML[0])(也.deepUnwrap())。
我想知道:
ObjC.bindFunction()定义可以解决问题的函数的绑定CFString*(),例如 toCFStringGetCString()或CFStringGetCStringPtr(),但对我来说如何翻译 ObjC …在为组件的多媒体链接字段分配值时,我想分配特定版本的图像的TCM URI.Tridion内部维护带有后缀"-v"的版本和相应的版本号ex: - 对于多媒体组件的第二版我的TCm URI将是tcm:pubNum-multiMediaCompoUniqueID-v2甚至我可以用这个"-v2"打开多媒体组件后缀URI通过搜索功能.现在让我说我创建了5个版本的多媒体图像和大约5个版本的组件,对于每个版本的组件我试图将"-v"后缀URI分配给组件的多媒体链接字段然后我得到了以下错误: -
"在URI中找到了预期的版本:tcm:pubNum-compoUniqueID."
和我的组件的xml如下: -
<imageField xmlns="uuid:e65ab5b8-babe-4146-a8e4-9b6fda694ea1" xlink:type="simple" xlink:href="tcm:pubNum-multiMediaCompoUniqueID-v1" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title="HTML.zip"></imageField>
Run Code Online (Sandbox Code Playgroud)
如果我尝试手动分配这个错误,我也会得到同样的错误,我也试图逃避双引号并且在拍摄时遇到了一些麻烦.
所以我的简单定义是,如果Tridion维护多媒体组件的所有版本,那么为什么它不允许我们分配该多媒体组件的先前/特定版本TCm URI.因为我正在为客户端做一个自动化过程,这可能是一个特殊的要求,但我的客户想要查看每个版本的组件,哪个版本的图像被分配(多媒体组件的文件扩展可能存在差异)和不是最近的一个.这可能吗?
我想在我正在编写的应用程序中使用Archive Utility.app来压缩一个或多个文件.
做(从命令行):
/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility file_to_zip
Run Code Online (Sandbox Code Playgroud)
是否有效,但它创建了一个cpgz文件,我可以忍受(尽管.zip会更好)但主要问题是我无法将2个文件压缩成1个档案:
/System/Library/CoreServices/Archive\ Utility.app/Contents/MacOS/Archive\ Utility ~/foo/a.txt ~/bar/b.txt
Run Code Online (Sandbox Code Playgroud)
上面的命令将创建2个档案(〜/ foo/a.txt.cpgz和〜/ bar/b.txt.cpgz).
我不能让它做我想做的事:
open -a /System/Library/CoreServices/Archive\ Utility.app --args xxxx
Run Code Online (Sandbox Code Playgroud)
我宁愿不使用zip命令,因为要压缩的文件相当大,所以内置进度条很好.
或者,我可以通过编程方式使用Archive Utility吗?
谢谢.
我试图使用某些 OSX 框架中可用的方法为我的 macOS 10.13 设置的每个显示器截取屏幕截图,但使用某些 OSX 框架中的方法会返回CGImageDestinationCreateWithURL,我不知道我做错了什么。CGImageDestinationRefNULL
我认为我遇到的问题在于该行:
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码如下:
主要.cpp:
#include <iostream>
#include <string>
#include <QuartzCore/QuartzCore.h>
#include <CoreServices/CoreServices.h>
#include <ImageIO/ImageIO.h>
int main(int argc, const char * argv[]) {
std::string baseImageOutput = "/Users/bogdan/Desktop";
std::string pathSeparator = "/";
std::string baseImageName = "image-";
std::string imageExtension = ".png";
CGDisplayCount displayCount;
CGDirectDisplayID displays[32];
// grab the active displays
CGGetActiveDisplayList(32, displays, &displayCount);
// go through the list
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我使用以下链接的代码来处理元数据字段: -
https://code.google.com/p/tridion-practice/wiki/ChangeContentOrMetadata
但是当我尝试为日期类型的元数据字段赋值时,我得到以下xml验证错误: -
"System.ServiceModel.FaultException`1 [myPorject.serviceReference.CoreServiceFault]:XML验证错误.原因:'uuid:myUUID:dateField'元素无效 - 值'10/4/2012 03:04:00 AM'是根据其数据类型'http://www.w3.org/2001/XMLSchema:dateTime'无效 - 字符串'10/4/2012 03:04:00 AM'不是有效的DateTime值..(故障详细信息是等于myPorject.serviceReference.CoreServiceFault)"
无论我将值分配为字符串还是DateTime数据类型我都得到相同的错误,我还尝试使用Datetime数据类型重载AddValue方法,但到目前为止还没有任何工作.
AddValue方法的代码片段: -
public void AddValue(string value1)
{
string value = string.IsNullOrEmpty(value1) ? null : value1; ;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value;
}
Run Code Online (Sandbox Code Playgroud)
请为Date和Number数据类型建议解决方案.提前致谢
core-services ×12
macos ×5
cocoa ×4
objective-c ×3
tridion ×3
tridion-2011 ×3
applescript ×1
c++ ×1
compression ×1
ios ×1
ios6 ×1
iphone ×1
quartz-core ×1
recycle-bin ×1
swift ×1
symlink ×1
uti ×1