私は客観的なc関数に少しこだわっていて、助けを探していました!
これは、Twitter からデータを配列として取得し、Core Data に挿入する OSX アプリ用です。
XML としてファイルに書き込みたい Core Data 内のオブジェクトの負荷があります。XML としてディスクに書き込みたいライブラリ オブジェクトの配列をフィルタリングして返すフェッチ要求があります。
私はさまざまなライブラリとチュートリアルをオンラインで見てきましたが、それらはすべて書くことよりも読むことに重点を置いているように見えます.ライブラリの配列であるという事実も問題を複雑にしているようです.
これまでのところ、これを試してみましたが、ファイルを作成するようには見えませんが、面倒なことにエラーも発生しません。
-(void)writeTweetsToXML{
//Create new fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//Set new predicate to only fetch tweets that have been favourited
NSPredicate *filterFavourite = [NSPredicate predicateWithFormat:@"approved == YES"];
//Setup the Request
[request setEntity:[NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:_managedObjectContext]];
//Assign the predicate to the fetch request
[request setPredicate:filterFavourite];
NSError *error = nil;
//Create an array from the returned objects
NSArray *tweetsToExport = [_managedObjectContext executeFetchRequest:request error:&error];
NSAssert2(tweetsToExport != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);
//for (id obj in tweetsToExport)
//NSLog(@"obj: %@", obj);
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [NSString stringWithFormat:@"%@/tweets.xml", documents];
NSString *writeerror;
if(tweetsToExport) {
[tweetsToExport writeToFile:path atomically:YES];
NSLog(@"%@ written to %@", tweetsToExport, path);
}
else {
NSLog(@"%@",writeerror);
}
}
そして、これは管理対象オブジェクトの構造です:
@property (nonatomic, retain) NSString * text;
@property (nonatomic, retain) NSString * userName;
@property (nonatomic, retain) NSString * realName;
@property (nonatomic, retain) NSString * avatarUrl;
@property (nonatomic, retain) NSString * tweetID;
@property (nonatomic, retain) NSNumber * approved;
@property (nonatomic, retain) NSDate * postDate;
@property (nonatomic, retain) NSDecimalNumber * longitude;
@property (nonatomic, retain) NSDecimalNumber * latitude;
@property (nonatomic, retain) NSNumber * profanity;
@property (nonatomic, retain) NSString * otherUserTweet;
@property (nonatomic, retain) NSString * favouriteTweet;
有用な情報やライブラリへのポインタは非常に役立ちます!
ありがとう
ガレス
編集1 OK、配列をデータとして再エンコードしようとしましたが、コードを少し変更して書き込みの成功/失敗を報告しました。エンコードせずに書き込みに失敗しましたが、出力は本質的にゴミです。
コードは次のようになりました。
NSDictionary* environ = [[NSProcessInfo processInfo] environment];
BOOL inSandbox = (nil != [environ objectForKey:@"APP_SANDBOX_CONTAINER_ID"]);
NSLog(@"App Sandbox Status = %d", inSandbox);
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [NSString stringWithFormat:@"%@/tweets.xml", documents];
NSString *writeerror;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:tweetsToExport];
if(tweetsToExport) {
BOOL successful = [data writeToFile:path atomically:YES];
NSLog(@"Success = %d", successful);
}
else {
NSLog(@"%@",writeerror);
}
ただし、ガベージ出力が生成されます。
bplist00‘úùX$versionX$objectsY$archiverT$top܆Ø$*+,-./04:FMDRSXfghijknsxÜáàâäãéìòU$null“
ZNS.objectsV$class£
ÄÄÄÄ#›
!"#$%&'(^otherUserTweetWtweetIDXrealNameXapprovedYlongitudeXpostDateXlatitudeYavatarUrlYprofan ityXuserNameTtext^favouriteTweetÄÄÄÄÄÄ Ä
ÄÄÄÄÄÄ_wPS Myself alongside the mighty @CJbeatz will be co-hosting and DJ for a huge gig for schools at Wembley Arena this Wed.\TherealNihalWNihal A_Qhttp://a0.twimg.com/profile_images/1021089851/BB213320_RADIO_1_- _NIHAL_normal.jpg_353964930917085186“1
23WNS.time#A∑ⲶÄ
“5678Z$classnameX$classesVNSDate¢79XNSObject◊
;<=>? @ABCD/DC[NS.mantissa[NS.negative[NS.exponent^NS.mantissa.boYNS.lengthZNS.compactÄO“56GH_NSDeci malNumberPlaceholder•IJKL9_NSDecimalNumberPlaceholder_NSDecimalNumberXNSNumberWNSValue◊
;<=>?@AOCD/DCÄORNO“56TUUTweet£VW9UTweet_NSManagedObject›
Z[ ]^_`%b'dÄÄÄÄÄÄÄÄÄÄÄÄÄ_"Bird. Bath. http://t.co/1PLF2gKI4T[DerrenBrown\Derren Brown_Zhttp://a0.twimg.com/profile_images/3682019430/d4636e8301b238c6a10c55efacd2442c_normal.j peg_353965570888192000“1
l3#A∑âˇ@Ä
◊
;<=>?@ApCD/DCÄO◊
;<=>?@AuCD/DCÄO›
z{ }~Ä%Ç'ÑÄÄÄÄÄ!Ä Ä"ÄÄÄÄÄÄ_âThe Surgery with myself and new resident Doctor @DrRadhaModgil starts at 9pm on @BBCR1 It's a Summer Special - 03700100100, Text on 81199Sahj_Aled Haydn Jones_Mhttp://a0.twimg.com/profile_images/2254837339/Aled-012_- _Version_3_normal.jpg_353965267564507138“1
å3#A∑â˛ˆÄ
◊
;<=>?@AêCD/DCÄO◊
;<=>?@AïCD/DCÄO“56ôö^NSMutableArray£ôõ9WNSArray_NSKeyedArchiver—ûüTrootÄ#-27^dit{ÅÉÖᢠ±π¬À’fiÁÒ˚ "$&(*,.02¨π¡*,19BDIT]dgpãó£≤º«…‹›fl‡Â%7@HWYlmnqv|ÄÜò≥µ∑πªΩø¡√≈«…ÀÕÚ˛h}Çãçúû ±≤≥¬ƒ◊ÿŸÙˆ¯˙¸˛
öû±$&57JKL[]pqrwÜäí§ß¨†Æ
編集 2
このファイルを適切なビューアー (BBEdit) で開くと、フォーマットはOKですが、あまり便利ではありません。できるようにしたいのは、値を持つオブジェクトを XML にエンコードすることだけです。 .