0

我的问题是地面控制示例。当我使用默认 url 来获取消息问候时,它可以工作,但是当我将其更改为我自己服务器上 plist 的 URL 时。没有消息出现,它只是空白。

我要更改为自己的服务器的行如下:

static NSString * const kGroundControlDefaultsURLString =
@"http://ground-control-demo.herokuapp.com/defaults.plist";

我已经尝试下载确切的 plist 文件并将其上传到我的服务器,但这甚至不起作用。

在浏览器中访问文件时,我注意到一个不同之处,在上面的示例链接中,它会自动下载,但在我自己的服务器上,它会在服务器中打开。

所以然后我尝试将以下内容添加到我的 .httaccess 文件中,以使我自己的服务器上的文件也自动下载,它在添加后完成了,但也无法从应用程序运行。

<FilesMatch "\.(?i:plist)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

调试器在失败时什么也不吐,当它工作时(来自示例 URL)它吐出以下内容:

2012-11-11 17:18:40.163 GroundControl Example[13804:f803] 
NSUserDefaultsDidChangeNotification: NSConcreteNotification 0x68b9e40 {name = 
NSUserDefaultsDidChangeNotification; object = <NSUserDefaults: 0x6e83400>}

所以这是我的问题,基本上我想做的就是通过将 .plist 文件上传到我的服务器并使用地面控制来使用它来使文​​件正常工作。

感谢 Stackoverflow 的帮助。

如果有帮助,这是一些groundControl代码。

-来自 AppDelegate.m

static NSString * const kGroundControlDefaultsURLString = @"http://ground-control-demo.herokuapp.com/defaults.plist";

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL:[NSURL URLWithString:kGroundControlDefaultsURLString]];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

-来自 ViewController.m

@implementation ViewController

- (void)updateValues {
    self.greetingLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"Greeting"];
}

#pragma mark - UIViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
        NSLog(@"NSUserDefaultsDidChangeNotification: %@", notification);
        [self updateValues];
    }];

    [self updateValues];
}

解决方案

根据 Jake Bonham 的评论,

在我的服务器上更改我的 .httaccess 文件中的这一行,使用 GroundControl 类和所有。

ForceType application/octet-stream   

八位字节流到 x-plist

<FilesMatch "\.(?i:plist)$">
  ForceType application/x-plist
  Header set Content-Disposition attachment
</FilesMatch>

也许这也有帮助

首先将 plist 加载到字典中。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

//THIS IS THE PART THAT I CHANGED
 NSURL* url = [NSURL URLWithString:@"http://mydomain.org/defaults.plist"];
 NSDictionary* dict = [NSDictionary dictionaryWithContentsOfURL:url];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dict];
//AND FINALLY LOAD dict INTO NSUserDefaults


    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}
4

1 回答 1

2

我也遇到了这个问题。注销错误响应说它需要类型“application/x-plist”并从我保存的 .plist 文件中获取“application/octet-stream”。

您的解决方案删除了​​ GroundControl 类。您正在将 url 加载到 dict 中,然后将其保存到用户默认值。所以它有效。只是不使用地面控制。

于 2012-11-12T23:19:49.800 回答