次の2つの問題を抱えています。
最初の:フィードの更新は非同期で行われます。フィードがリフレッシュされて更新されるタイミングを確認するには、PSFeedRefreshingNotificationとPSFeedEntriesChangedNotificationの通知を聞く必要があります。通知オブジェクトは問題のPSFeedになります。一例として、
:
-(void)feedRefreshing:(NSNotification*)n
{
PSFeed *f = [n object];
NSLog(@"Is Refreshing: %@", [f isRefreshing] ? @"Yes" : @"No");
NSLog(@"Feed: %@", f);
NSLog(@"XML: %@", [f XMLRepresentation]);
NSLog(@"Last Error: %@", [f lastError]);
if(![f isRefreshing])
{
NSInteger emailCount = 0;
NSEnumerator *e = [f entryEnumeratorSortedBy:nil];
id entry = nil;
while(entry = [e nextObject])
{
emailCount++;
NSLog(@"Entry: %@", entry);
}
NSLog(@"Email Count: %ld", emailCount);
}
}
-(void)feedUpdated:(NSNotification*)n
{
NSLog(@"Updated");
}
-(void)pubSubTest
{
PSClient *client = [PSClient applicationClient];
NSURL *url = [NSURL URLWithString:@"https://mail.google.com/mail/feed/atom/inbox"];
PSFeed *feed = [client addFeedWithURL:url];
[feed setLogin: @"[email protected]"];
[feed setPassword: @"correctPassword"];
NSError *error = nil;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedUpdated:) name:PSFeedEntriesChangedNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(feedRefreshing:) name:PSFeedRefreshingNotification object:nil];
[feed refresh:&error];
if(error)
NSLog(@"Error: %@", error);
}
秒(とはるかに悪い)問題は、PubSubのは、正しく認証されたフィードを処理しないということです。私はhttp://www.dizzey.com/development/fetching-emails-from-gmail-using-cocoa/でこれを見て、自分のシステムで同じ動作を再現しました。このバグが10.7に該当するのか、以前のバージョンのOS Xに影響するのか分かりません。
「回避策」は、NSURLConnectionを使用して未加工フィードXMLの認証取得を実行することです。 initWithData:URL:メソッドを使用して、PSFeedにそれを押し込むことができます。これの非常に深刻な欠点は、あなたが実際にはPubSubingではないことです。タイマーを実行し、必要に応じて手動でフィードを更新する必要があります。
rdar:// problem/10475065(OpenRadar:1430409)というバグを報告するためにできることは、私ができることでした。
アップルが修正する機会を増やすために、重複したバグを提出することをお勧めします。
幸運。
ご協力いただきありがとうございます。私は重複したバグを提出しました。 –