我正在尝试使用Parse在我的iOS应用程序中实现Facebook登录.
let permissionsArray = ["public_profile", "email"]
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissionsArray)
{ (user: PFUser?, error: NSError?) in
if let user = user {
//we logged in!
}
else {
//login error!
}
}
Run Code Online (Sandbox Code Playgroud)
这在模拟器中很有效,但在设备上却不行.在设备上,我收到此错误:
Error Domain = com.facebook.sdk.login Code = 308"无法完成操作.(com.facebook.sdk.login错误308.)
错误代码308用于FBSDKLoginBadChallengeString"登录响应缺少有效的质询字符串".
在我在Facebook上授权我的应用程序之后,这会被调用:
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
Run Code Online (Sandbox Code Playgroud)
网址是:
fb1640722449492705://authorize/#state=%7B%22challenge%22%3A%225OKWv3wN%2BEH%2BeQu48Xv6ty%2BRuek%3D%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A1%2C%220_auth_logger_id%22%3A%22564CD915-2CFC-4989-9AF6-CEA389908D51%22%7D&granted_scopes=user_birthday%2Cpublic_profile&denied_scopes=&signed_request=c8SBBDeaNpF-R_XTYx4LRA0BWm5p9IwXDr8M4nL3YXI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUURhTXJibGw4Q3dITkd5M0xnQmNkVTNuYWRkeEVoTU5mMmx3eFpZU2IwZl9SU284YXhZdXZaRS02RnA2bU5Cdy1CWkVoRmt2Zk1xX1AxSHltUG00aWhkWE9hYmlvWFBiMnpCYkVnR1RRX3lzZVFIZXdHU19OcmpkNUF6WGtob1dfVE4wTmRrSGk5MzY0V2hFWUJDV0dfcE16RXpQVExHWE13X1dzb0QzZGtITm5fM0tHNjFxUjJyM3RDWVlNQTE4WENpS1dXTHUyM2dIRVhmTXc3ZTQ0M2xDQUtGRl9KSXcyVk1sS01FOTQ4dHQ2U1Fqb0tlVkp4RmJNSEFsWDZFYWxlUnQ2aGRrTGZlU2xuVTV5VjZ1bFhldHkxeEV5RmRDZVFHb2RXQ0dULVVCd3QyM0haY0dxNk8zbnE1cDRNWjNFZ012U2JhSGZyMmF6Wm8xUXk2X2xSQVNWcFlMVDZUdU5wZnMwVkJqNEdSaFEiLCJpc3N1ZWRfYXQiOjE0MzM0MTg2MDksInVzZXJfaWQiOiIxNDM3MzM0ODk5OTIwNDA5In0&access_token=CAAXUOnbG6uEBANtAd9DzWBSu4LLOEcPsu86Ny0Ir
是的,我遵循了Parse的Facebook登录指南中的所有内容(确保所有捆绑ID都匹配,实现了所有必需的AppDelegate方法等).
这个错误究竟是什么意思,你如何解决它?
C++ 11删除了所有容器的值类型为CopyConstructible和Assignable的要求(尽管容器上的特定操作可能会强加这些要求).从理论上讲,这应该可以定义,例如std::deque<const Foo>,哪些在C++ 03中是不可能的.
出乎意料的是,当我尝试这个时,gcc 4.7.2产生了它通常不可理解的错误[1],但是clang至少使错误可读并且与libc ++一起编译它没有错误.
现在,当两个不同的编译器产生不同的结果时,它总是让我想知道正确的答案是什么,所以我搜索了所有可以找到的const/assignable/value types/containers等等的引用.我发现差不多了十年来非常相似的问题和答案,其中一些在SO和其他C++邮件列表中的其他地方,包括Gnu buganizer,所有这些基本上可以概括为以下对话.
问:为什么我不能申报std::vector<const int>(作为一个简化的例子)
答:你为什么要这样做呢?这是荒谬的.
问:嗯,这对我来说很有意义.为什么我不能这样做?
答:因为标准要求值类型可分配.
问:但我不打算分配它们.我希望它们在我创建它们之后成为const.
答:这不是它的工作方式.下一个问题!
温和的潇洒:
A2:C++ 11决定允许这样做.你只需要等待.在此期间,重新思考你的荒谬设计.
这些似乎不是非常引人注目的答案,虽然可能我有偏见,因为我属于"但它对我有意义"的范畴.在我的情况下,我想有一个类似堆栈的容器,其中被推入堆栈的东西是不可变的,直到它们被弹出,这不会让我感到特别奇怪的是希望能够用类型表达系统.
无论如何,我开始考虑答案,"标准要求所有容器的值类型可以分配." 而且,据我所知,现在我发现了C++ 03标准草案的旧版本,这是真的; 它做了.
在另一方面,价值型std::map就是不看我喜欢它的分配.尽管如此,我还是再次尝试,然后gcc继续编写它而不用眨眼.所以至少我有一些解决方法.std::pair<const Key, T>std::deque<std::tuple<const Foo>>
然后我试图打印出的价值std::is_assignable<const Foo, const Foo>和std::is_assignable<std::tuple<const Foo>, const std::tuple<const Foo>>,而且事实证明,前者被报告为不分配,如你所期望的,但后者报告为分配后(通过铛和gcc).当然,它不是真正可转让的; 尝试编译a = b;被gcc拒绝投诉error: assignment of read-only location(这只是我在此任务中遇到的唯一错误消息,实际上很容易理解).但是,如果没有尝试进行赋值,clang和gcc同样乐于实例化deque<const>,并且代码似乎运行正常.
现在,如果std::tuple<const int>真的是可分配的,那么我不能抱怨C++03标准中的不一致- 而且,真的,谁在乎 - 但我发现令人不安的是,两个不同的标准库实现报告类型是可分配的,实际上,尝试分配给它的引用将导致(非常明智的)编译器错误.我可能在某些时候想要在模板SFINAE中使用该测试,并根据我今天看到的,它看起来不太可靠.
那么有没有人能够对这个问题有所了解(标题中):Assignable究竟意味着什么?还有两个奖励问题:
1)委员会是否真的意味着允许实例化具有const值类型的容器,或者他们是否考虑了其他一些不可分配的案例?
2)是否有真正的constnesses之间的差异显著const …
我目前使用parse.com来管理用户.他们有一个很好的API,适合我管理东西的后端.但我更愿意托管我自己的数据.
服务器后端,我可以很容易地在PHP中鞭打它.但我正在努力在iOS方面找到一个像样的库/框架来复制Parse的框架所做的事情.
要做一些简单的登录/注销,让用户"缓存"一个已保存的文件,使用块的方法可以在后台发送数据.关于在哪里查找或搜索什么以找到可以与我自己的系统集成的类似开源库的任何线索?
这是Cracking the Coding Interview(第5版)中Fibonacci序列的递归实现
int fibonacci(int i) {
if(i == 0) return 0;
if(i == 1) return 1;
return fibonacci(i-1) + fibonaci(i-2);
}
Run Code Online (Sandbox Code Playgroud)
在观看关于该算法的时间复杂度的视频后,斐波纳契时间复杂度,我现在理解为什么该算法在O(2 n)中运行.然而,我正在努力分析空间复杂性.
我在网上看了一下这个问题.
在这个Quora线程中,作者声明"在你的情况下,你有n个堆栈帧f(n),f(n-1),f(n-2),...,f(1)和O(1 )".你不会有2n堆栈帧吗?说f(n-2)一帧是实际的呼叫f(n-2),但是f(n-1)也不会有呼叫f(n-2)?
N3337,"工作草案,编程语言C++标准",在第13.3.1.2节中给出了以下示例,p.10:
struct A { };
void operator + (A, A);
struct B {
void operator + (B);
void f ();
};
A a;
void B::f() {
operator+ (a,a); // error: global operator hidden by member
a + a; // OK: calls global operator+
}
Run Code Online (Sandbox Code Playgroud)
但是,这只是一个注意事项:
注意:表达式中运算符的查找规则与函数调用中运算符函数名称的查找规则不同,如以下示例所示:
我的问题是标准中的哪个位置表明这是必须发生的事情,而不仅仅是用一个例子来说明?
据我所知,根据第13.3.1.2条,p.2,运算符表达式转换为运算符函数调用.那么为什么以及如何在上面的例子中有所不同呢?
在调查问题之后,我认为我可能忽略了这一点.同一条款中的第3和第6页一起声明全局候选人和成员候选人在查找运算符时被认为是平等的(因此查找规则与说明不同).但是,我对这个问题的调查是由这个例子引起的,它以与GCC 4.8和Clang相同的方式编译:
struct X {}; struct Y {};
void operator+(X, X) { }
void operator+(X, Y) { }
void test() {
void operator+(X, X);
X x; Y y;
x + …Run Code Online (Sandbox Code Playgroud) 我知道Android中的推送通知声音可以自定义(在iOS上已经正常工作).
但是,我没有在文档中看到任何引用,只有iOS自定义声音.
我在Parse.com论坛上看到大约一年前要求提供这样的功能,并回答它是"在桌面上".
关于那个的任何更新?如果没有"正式"支持,任何已知的解决方法,以使其工作?
android android-notifications parse-platform google-cloud-messaging
当使用AWK时,我很难理解为什么不存在的字段(后面的字段$NF)不等于等于数字零.
在下面的示例中,输入行有两个字段,因此根据规范$3应该是"未初始化的值"并且比较等于0.换句话说,$3 == 0应该返回true,但正如您在下面看到的那样它返回false:
$ echo '1 2' | awk '{ print($3 == 0 ? "t" : "f") }'
f
Run Code Online (Sandbox Code Playgroud)
"One True AWK"(版本20121220)和GNU AWK(版本4.2.1)的行为方式相同.这是GNU AWK输出:
$ echo '1 2' | gawk '{ print($3 == 0 ? "t" : "f") }'
f
Run Code Online (Sandbox Code Playgroud)
根据POSIX AWK规范,不存在的字段$3应该是未初始化的值:
对不存在的字段(即$ NF之后的字段)的引用应评估为未初始化的值.
此外,==如果一个操作数是数字而另一个是未初始化的值,则应该以数字方式进行比较:
比较(使用'<',"<=","!=","==",">"和"> ="运算符)如果两个操作数都是数字,则应以数字方式进行比较,如果一个是数字,则other的字符串值是数字字符串,或者如果一个是数字而另一个是未初始化的值.否则,操作数应根据需要转换为字符串......
最后,未初始化的值的"数值"应为零:
未初始化的值应具有零值的数值和空字符串的字符串值.
将此与未初始化的变量进行对比,该变量的确比较等于零:
$ awk 'BEGIN { print(x == 0 ? "t" : "f") }'
t
Run Code Online (Sandbox Code Playgroud)
所以在我们的第一个例子中,$3 …
简单的测试案例:
#include <iostream>
struct v {};
int main() {
std::cout << __VERSION__ << '\n' << (new v < new v) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
我知道比较指针有一个未指定的结果,但这里没有相关性(类似的例子可以通过更多的击键产生,如在后面的coliru片段中).
我方便的C++标准在§14.2第3段中说:
在名称查找后发现名称是模板名称或者operator-function-id或literal-operator-id引用一组重载函数,其中任何成员都是函数模板,如果后面跟着a <,将<始终作为一个的分隔符模板参数列表,从不为小于运算符.
既然v既不是模板名也不是函数id,我不明白为什么这应该适用.而且,显然,它都没有铿锵作响:
4.2.1 Compatible Clang 3.8.0 (tags/RELEASE_380/final 263969)
1
Run Code Online (Sandbox Code Playgroud)
但是,gcc(6.3.0)抱怨说:
main.cpp: In function 'int main()':
main.cpp:4:46: error: 'v' is not a template
std::cout << __VERSION__ << '\n' << (new v < new v) << '\n';
^
Run Code Online (Sandbox Code Playgroud)
我(和铿锵)在这里错过了什么吗? …
可能重复:
Cocoa应用程序的语法着色
我感兴趣的是语法高亮显示在可可的TextView.
我发现了几个资源:
通过
在委托中匹配的flex模式进行flex方法.在这种方法中,整个字符串在每个输入事件上被解析,因此性能降低.textStorageDidProcessEditingTextView
CocoaDev有一个关于语法高亮主题的页面:
使用NSTextStorageDidProcessEditingNotification,然后获取编辑范围,然后在那里应用着色.范围可能是wordboundaries或任何东西; 这肯定会提高性能.
在那里提到:例如,Xcode只对当前在屏幕上显示的文本进行着色,并推迟对文档的其余部分进行着色,直到您滚动它为止.如何实现这一点?
使用NSLayoutManager- 通过临时属性[仅]用于屏幕绘制,并且不以任何方式持久存在......如文档所述,但在输入空格字符之前,不会对最后编辑的范围进行着色.
自定义助手,如UKSyntaxColoredDocument - 很好,但语言定义是通过属性列表完成的; 如何使用其他/现有的语言定义?
这些方法对我来说似乎都不是可扩展的或强大的(除了4.可能......).
我知道SH的强大现有库像pygments ; 和PyObjC.
问题:如何使用某些现有的库(如pygments)在Cocoa中突出显示可扩展且高效的语法TextView?
注意:我知道这个问题非常广泛(太长).欢迎提供经验和建议以及解决方案.谢谢.
在这个问题上找到了另一个类似的线程:Cocoa app的语法着色
我是新手Bison,我在转换/减少冲突时遇到问题...我正在尝试从文件加载到array data[]:
struct _data
{
char name[50];
char surname[50];
int year;
} data[1000];
Run Code Online (Sandbox Code Playgroud)
这是我的野牛代码的一部分:
%token ID NUM NL EOF
%%
File : List EOF
;
List : Record
| List Record
;
Record : Name Surname Year NL { count++; }
| NL { count++; }
| /*empty*/
;
Name : ID { strcpy(data[count].name, yytext); }
;
Surname: ID { strcpy(data[count].surname, yytext); }
;
Year : NUM { data[count].year= atoi(yytext); }
;
%%
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
conflicts: 5 …Run Code Online (Sandbox Code Playgroud)