从ViewController中的AppDelegate访问数据。

时间:2014-03-25 03:16:03

标签: ios objective-c count parse-platform

我是初学程序员和本网站的新手,我在尝试之前尝试寻找解决方案,但是如果之前已经问过这个问题就很难对其进行措辞。

我正在使用Parse,现在我的主要目标是在标签中显示应用中的用户数量。

在我的AppDelegate.m

PFQuery *userCountQuery = [PFUser query];
[userCountQuery countObjectsInBackgroundWithBlock:^(int userCount, NSError *error) {
    if (!error) {
        // The count request succeeded. Log the count
        NSLog(@"There are %d users", userCount);
    } else {
        // The request failed
    }
}];

该代码在我的控制台中获取正确的数字,现在我只是将此变量放入视图控制器以与标签一起使用。有一个简单的方法可以做到这一点,还是我从一开始就完成这个缺陷的方法?

2 个答案:

答案 0 :(得分:1)

实际上,您在app委托中创建了一个getter / setter,但这不是正确的开发方式。我的意思是你应该在你的APP中有更多的层,比如经理,来处理这些数据

在这里你可以先尝试看看它是否有效

我的结构将允许您稍后将代码从appDelegate移动到任何其他类/地方,因为您可能在学习期间很快使用getter / setter;)

<强> myAppDelegate.h

@interface myAppDelegate : NSObject <UIApplicationDelegate>
{
}

<强> ----------

<强> myAppDelegate.m

@interface myAppDelegate()

@end

@implementation myAppDelegate

- (int)getProperNumber
{
    return properNumber;
}

<强> ----------

<强> ViewController.m

mAppDelegate * appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
int count = [appDelegate getProperNumber];

干杯。

答案 1 :(得分:1)

我假设您目前在AppDelegate中有一个方法与您一起使用片段,就像这样:

@interface AppDelegate {
...

- (void)countUser;
}

然后您可以将该方法更改为:

- (void)countUserWithSuccessfulBlock:(void (^)(int))successfulBlock
{
    PFQuery *userCountQuery = [PFUser query];
    [userCountQuery countObjectsInBackgroundWithBlock:^(int userCount, NSError *error) {
        if (!error) {
            // The count request succeeded. Log the count
            NSLog(@"There are %d users", userCount);
            successfulBlock(userCount);
        } else {
            // The request failed
        }
    }];
}

然后从你的ViewController:

AppDelegate* appDelegate = (AppDelegate*) [UIApplication shareApplication].delegate;
[appDelegate countUserWithSuccessfulBlock:^(int result) {
    //Display to your label;
}];