将 Google 的云计算功能连接到 Apple 的 iPhone 中
2009-02-25 11:06:35 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

访问 isonnet 项目主页,可以看到此输出。此 URL 给出的是一个编辑后的莎士比亚十四行诗的完整 plist 表示。不过,请注意,您的浏览器可能将此显示为一个巨大的纯文本文件。XML plist 是有效的 XML 而且大多数浏览器都会试图显示它。请参阅页面的源代码,查看格式化的 plist。
Python 和 App Engine 示例的更详细信息以及有关 Google App Engine 的高级教程的链接。但是,目前,让我们先来看看一个 iPhone 应用程序是如何接受此 plist 数据来更改应用程序数据的。
创建一个能从 Google App Engine 动态读取并缓存 XML plist 文件的 iPhone 应用程序
TouchEngine 包含一组对象,使得在 iPhone 上下载和缓存 XML plist 变得十分简单。我们用来下载和缓存 sonnet plist 所用的对象在其头文件 GRplistController.h 内描述,如清单 4 所示。
清单 4. GRplistController.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "Reachability.h"
#import "GRplistControllerDelegateProtocol.h"
typedef enum {
kGRplistDownloadCannotInitiate = 0,
kGRplistConnectionFailure,
kGRplistFileFormatFailure
} GRErrorCode;
#define GR_ERROR_DOMAIN @"GRplistController_Error_Domain"
@class GRplistModel;
// This class will grab a remote plist from the server whenever update
// is called.
// Also registers with the Reachability object for notifications when
// the remote host changes availability and updates accordingly
// asking the delegate first if downloading new data is desirable.
@interface GRplistController : NSObject {
NSURL *remoteURL;
NSObject <GRplistControllerDelegate> *delegate;
NetworkStatus remoteHostStatus;
NetworkStatus internetConnectionStatus;
NetworkStatus localWiFiConnectionStatus;
BOOL loadingData;
@private
GRplistModel *_model;
BOOL hostIsReachable;
NSMutableDictionary *plistIndex;
NSMutableData *receivedData;
NSURLConnection *connection;
}
@property(nonatomic, retain)NSURL *remoteURL;
@property(nonatomic, assign)NSObject *delegate;
@property(nonatomic, readonly)GRplistModel *model;
//date of last download
@property(nonatomic, retain)NSDate *lastUpdate;
@property(nonatomic, getter=isLoadingData)BOOL loadingData;
@property NetworkStatus remoteHostStatus;
@property NetworkStatus internetConnectionStatus;
@property NetworkStatus localWiFiConnectionStatus;
//designated Initializer
- (id)initWithRemoteURL:(NSURL *)aRemoteURL;
- (void)updateDataFromDisk;
- (void)download;
- (void)cancelDownload;
@end
更多精彩
赞助商链接