0

私は客観的な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 にエンコードすることだけです。 .

4

1 に答える 1

0

、、、、、およびのwriteToFile:atomically:プロパティ リスト タイプでのみ機能するため、最初の試みは失敗しました。はリストになく、作成できるサブクラスもありません。辞書の配列を書き込もうとしているのではなく、管理対象オブジェクトの配列を書き込もうとしています。NSStringNSNumberNSDataNSDateNSArrayNSDictionaryNSManagedObject

への変換NSDataと書き込みは機能しましたが、取得しているのはバイナリ プロパティ リストです。これはゴミではなく、そのコードに期待される形式ですが、人間が読めるようには設計されていません。

元のコードを取得したが、フェッチを実行する前にこれを追加した場合:

[request setResultType:NSDictionaryResultType];

...あなたができるものを手に入れるでしょうwriteToFile:atomically:

于 2013-07-11T17:19:44.250 に答える