1

オブジェクトの説明は通常、デバッグと NSLog での出力に使用されるため、私の質問は素朴かもしれません。object.description を使用しようとする私のアプローチが間違っている可能性があることも認めなければなりません。ただし、私の場合、説明の情報が必要なものであることがわかりました。説明文から簡単に部品を抜き出せれば。

さて、ここに私のコードがあり、必要なのはユーザー名(ユーザー名ではありません)です:

    self.facebookAccountStore = [[ACAccountStore alloc] init];

    ACAccountType* facebookAccountType = [self.facebookAccountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    //[self.facebookAccountStore requestAccessToAccountsWithType:facebookAccountType withCompletionHandler:^(BOOL granted, NSError* e) {
    [self.facebookAccountStore requestAccessToAccountsWithType:facebookAccountType options:facebookOptions completion:^(BOOL granted, NSError* e) {
        if (granted) {
            NSArray* accounts = [self.facebookAccountStore accountsWithAccountType:facebookAccountType];
            self.facebookAccount = [accounts lastObject];
            NSLog(@"acct description: %@", self.facebookAccount.description);

            NSLog(@"acct type: %@", self.facebookAccount.accountType);
            NSLog(@"acct credential: %@", self.facebookAccount.credential);
            NSLog(@"acct identifier: %@", self.facebookAccount.identifier);
            NSLog(@"acct username: %@", self.facebookAccount.username);
        } else { //.....
        }

アカウントの説明は次のとおりです。

     acct description: 
     objectID: x-coredata://F8123001-FB33-48D4-B1A7-EXXXX1243XXXX/Account/p10
     enabledDataclasses: {(
         "com.apple.Dataclass.Contacts",
         "com.apple.Dataclass.Calendars"
     )}
     enableAndSyncableDataclasses: {(
     )}
     properties: {
         fullname = "LOOKAT HERE";
         uid = 100004223213342323;
     }
     parentAccount: (null)
     owningBundleID:(null)


     type:com.apple.facebook
     identifier: EF34399A-8577-459B-BE5E-FD12132SEDSFE
     accountDescription: Facebook
     username: pspped.ok@mailserver.com

この部分をチェックしてください: properties: { fullname = "LOOKAT HERE"; uid = 100004223213342323; }

これはまさに私が必要とするものです。これを使用すると、SLRequest や SLRequestMethodGET などを実行してユーザー名を取得する必要がなくなります (これはまだわかりませんが、オブジェクトの説明を使用しようとするもう 1 つの動機です)。

私の質問は、説明を解析して fullname プロパティを取得するのが間違っているかどうかです。間違っている場合、なぜですか?次の質問は、間違っているかどうかです。account.description. fullname または account.fullname なので、account.username は機能しますが機能しません。

お時間/ご入力いただきありがとうございます。

4

2 に答える 2

3

を解析するのは間違っていdescriptionます。説明には文書化された形式がないため、間違っています。これは、オブジェクトのあるインスタンスから次のインスタンスへ、および OS のあるバージョンから次のバージョンへと、任意に変更される可能性があります。したがって、コードが壊れる可能性があります。文書化されていない動作に依存することは、Apple との iOS 開発者プログラム契約にも違反しており、Apple にいつでもアプリをプルする権利を与えています。

さらに、何らかの理由で文書化されていない API を絶対に使用したい場合は、[self.facebookAccount.description valueForKey:@"fullName"];を使用することもできます。Core Data オブジェクトの記述がどのように出力されるかをもう一度推測しなくても、OS の変更に対して同様に堅牢になります。

于 2012-10-03T21:44:09.533 に答える
0

これは最も効率的な方法ではありませんが、私にとってはうまくいきます。

ACAccount *acc = theAccount;
NSArray *parse = [acc.description componentsSeparatedByString:@"uid = "];
parse = [[parse objectAtIndex:1] componentsSeparatedByString:@";"];
NSString *UID = [parse objectAtIndex:0];
parse = [acc.description componentsSeparatedByString:@"fullname = \""];
parse = [[parse objectAtIndex:1] componentsSeparatedByString:@"\";"];
NSString *name = [parse objectAtIndex:0];
于 2013-01-24T05:37:14.130 に答える