从iOS8 Today Widget访问PFUser currentUser

时间:2014-09-14 16:59:55

标签: parse-platform ios8 ios-app-extension

我在Parse google小组中问了这个问题,但我想在SO上打开它会更广泛。在官方发布之前围绕讨论与iOS8相关的任何事情的规则我仍然有点模糊,但是通过GM out和扩展讨论,我想我现在可以问这个问题了。如果没有,它可以等待。

我正在使用Parse作为后端。我想构建一个Today小部件,它显示一些与特定currentUser相关的记录。加载和初始化Parse不是问题,框架被加载和初始化,这很好。但即使登录到容器应用程序,似乎我没有引用currentUser。

这是我创建的代码,只是为了确认我可以访问当前用户,但这不起作用。我试图将它保存在NSUserDefault中,无论如何这可能是一个黑客,但是没有成功。

 PFUser *currentUser = [PFUser currentUser];
    if (currentUser) { 
        nameTF.text = [NSString stringWithFormat:@"%@ %@", [currentUser objectForKey:@"firstName"], [currentUser objectForKey:@"lastName"]]; 
    } else { 
        nameTF.text = @"No freaking clue who you are."; 
    }

但我所看到的只是“没有吓人的线索......”文字。

我的第一个问题是我是否可以访问当前用户?我认为我可以并且需要以某种方式将其纳入小组中并且我错过了一些愚蠢的东西。如果是这样,有人可以向我指出有关实现此目标的最佳方式的来源或信息吗?一旦我可以与当前用户进行查询,我会没事的。

再次感谢您提出的任何建议。

*更新*

在Pos的Fosco Marotto建议将sessionToken存储在NSUserDefaults中,然后在扩展中使用该令牌来调用PFUser becomeInBackground,我将以下代码放在一起测试该建议,这是有效的。它需要改进,因为它有点hackish所以我没有把它标记为答案。

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc]   initWithSuiteName:@"XXXXXXXXXXXXXXXXX"]; 
NSString *pfToken = [sharedDefaults valueForKey:@"PFUserSessionToken"]; 

[PFUser becomeInBackground:pfToken block:^(PFUser *currentUser, NSError *error) { 
   if (error) { 
      // The token could not be validated. 
      NSLog(@"error happened during becomeInBackground - token could not be validated"); 
      // Show the token just to make sure we got it
      nameTF.text = pfToken; 
   } else { 
      // The current user is now set to user. 
      // do stuff with the user 
      nameTF.text = [NSString stringWithFormat:@"%@ %@", [currentUser objectForKey:@"firstName"], [currentUser objectForKey:@"lastName"]]; 
   } 
}];

// Now lets see if we can get PFUser outside of the block

// Not sure if we need this

PFUser *currentUser = [PFUser currentUser];

if (currentUser) {
     // We have a reference to currentUser
     nameTF.text = [NSString stringWithFormat:@"%@", [currentUser objectForKey:@"firstName"]];
} else {

    nameTF.text = @"Don't think you're getting the PFUser thing right here";
}

我可以获取currentUser并对其进行查询。感谢Fosco的指导,希望这更接近解决方案

2 个答案:

答案 0 :(得分:0)

现在,Parse提供了在主机应用和扩展之间共享数据的官方解决方案。更多信息可以在https://www.parse.com/docs/ios/guide#extensions

找到

答案 1 :(得分:-1)

我成功地将当前用户的用户名的NSString从我的应用程序保存到用户默认值。然后在小部件的视图控制器中,我使用该用户名查询用户。