我已将我的项目更新到iOS 9,我的podfile和所有必需的文件,但它不会构建.我悲伤的根源是以下错误消息:
Type arguments cannot be applied to non-parameterized class 'BFTask'
这是唯一显示的错误,但它在两者中都显示多次PFAnalytics.h
,可能更重要PFObject.h
.
有人能告诉我这意味着什么,请建议一个解决方案?我希望我提供了足够的信息,但如果没有,请告诉我!
代码示例如下:在PFObject.h
和中PFAnalytics.h
,到处都有以下内容:
(BFTask PF_GENERIC(XXSOMECLASS *)*) someMethod;
Run Code Online (Sandbox Code Playgroud)
抛出错误.这是不是我的代码,它是PFObject.h
和PFAnalytics.h
以前一样说.抛出错误的函数示例PFObject.h
如下
- (BFTask PF_GENERIC(NSNumber *)*)saveInBackground;
- (BFTask PF_GENERIC(NSNumber *)*)saveEventually;
- (BFTask PF_GENERIC(NSNumber *)*)deleteInBackground;
+ (BFTask PF_GENERIC(NSNumber *)*)saveAllInBackground:(PF_NULLABLE NSArray *)objects;
+ (BFTask PF_GENERIC(NSNumber *)*)deleteAllInBackground:(PF_NULLABLE NSArray *)objects;
// .... etc
Run Code Online (Sandbox Code Playgroud)
当点击停止标志时,建议是删除PF_GENERIC(NSNumber*),导致这样的方法
- (BFTask *)xxsomeMethod;
Run Code Online (Sandbox Code Playgroud)
但这并没有帮助,因为它变得更加混乱
更新02:我的内容Podfile
:
# Uncomment this line to define a global platform for your …
Run Code Online (Sandbox Code Playgroud) 自从更新Facebook到v4.0.x和最新的Parse库以来,我的应用程序正在挂起,似乎在尝试登录用户时.
我的堆栈跟踪如下所示:
我之前遇到过类似的问题,在这里回答:调用[PFFacebookUtils initializeFacebook]时解析崩溃 - semaphore_wait_trap
然而,该解决方案不再有效,因为它似乎[PFUser currentUser]
已被替换,[PFUser(Private) _getCurrentUserWithOptions:]
并且[BFTask(Private) waitForResult:withMainThreadWarning:]
它被卡住了.
在我的应用程序中,我将PFUser子类化为一个名为MPLUser的类,并重写了用户方法.不确定这可能与问题有关吗?
+ (MPLUser *)user
{
return (MPLUser *)[PFUser user];
}
Run Code Online (Sandbox Code Playgroud)
一旦开始发生,就无法启动应用程序.但是,我通常设法在锁定开始之前启动应用程序几次.它通常发生在崩溃之后...
我正在使用pod'ParseFacebookUtilsV4'并将所有库更新到最新版本.
更新:
这是来自另一个线程的更多堆栈跟踪,似乎正在尝试登录:
我按以下顺序初始化Parse和Facebook.如果我拨打电话,它会崩溃:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self initDefaults];
[self initialiseApplicationSpecifics];
[self setupParseWithOptions:launchOptions];
[self enableCrashReporting];
[self setupIAPs];
//etc...
}
- (void)initialiseApplicationSpecifics
{
[Flurry setCrashReportingEnabled:YES];
[self registerParseSubclasses];
[ParseCrashReporting enable];
[Parse enableLocalDatastore];
#ifdef MPL
[Parse setApplicationId:@"xxxyyy"
clientKey:@"xxxyyy"];
[Flurry startSession:@"xxxyyy"];
#elif MGM
[Parse setApplicationId:@"yyyxxx"
clientKey:@"yyyxxx"];
[Flurry startSession:@"yyyxxx"];
#endif
}
- (void)setupParseWithOptions:(NSDictionary *)launchOptions …
Run Code Online (Sandbox Code Playgroud) BFTask
我一直很好,但我有一个抱怨:我还没有看到一个关于你应该如何cancel
完成任务的实例.关于这个主题的整个文档可以在他们的GitHub页面上找到,其中包含一个简短的部分,其中包括我关心的部分:如何取消任务.
// Somewhere else.
MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init];
[obj doSomethingComplicatedAsync:cancellationToken];
// When you get bored...
[cancellationToken cancel];
Run Code Online (Sandbox Code Playgroud)
他们的代码片段后跟:
注意:取消令牌实现应该是线程安全的.
我想知道以下内容:
cancel
在BFTask
界面本身提供方法?他们有一个属性,表示任务是否被取消,但没有办法取消它.cancellationToken(s)
在BFTask
自己身上加入财产?cancel
任务本身强烈耦合?或者是一般的实现成为可能作为的情况cancelAllOperations
的NSOperationQueue
?