1

私はiOSに非常に慣れてPFQueryいないので、あなたの助けが必要です

IM は、取得PFQueryしたオブジェクトの配列を localに格納NSArrayしようとしていますが、内部でそれを実行しようとしていますif (!error)が、ブロックが終了するとブロックを離れず、配列の値も終了します。

 //InstallersDirectory.m

 @interface InstallersDirectoryTVC ()

 @property (nonatomic, strong) NSArray *supervisors;


 @end

 //more code goes here
- (void)viewDidLoad
{
  [super viewDidLoad];


  PFQuery *query = [PFQuery queryWithClassName:@"InstallersInfo"];
  [query whereKey:@"supervisor" equalTo:@"yes"];
  [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

      if (!error) {
          for (PFObject *object in objects) {
              self.supervisors = [objects valueForKey:@"supervisor"];
          }


  }else {
      NSLog(@"Error, %@ %@",error,[error userInfo]);
  }
}];

self.supervisors.count や のように、すべてがブロック内NSLogで機能しますが、ブロックを離れることはまったくありません。これらの値を確実に self.supervisors に格納する方法を教えてください。

ありがとう !!

編集 | コメント

4

1 に答える 1

0

この問題についてまだサポートが必要な場合は、次の1つまたは2つの提案があります。

まず、self.supervisorsはNSArrayです。NSArrayとして、作成時に完全に初期化して設定する必要があります。したがって、結果を反復処理している場合でも、毎回新しい配列を作成しているため、最後の反復のみがself.supervisorsに格納される可能性があります。

代わりにこれを試してください、

@property(nonatomic、strong)NSMutableArray*スーパーバイザー;

あなたのブロックで:

[self.supervisors addObject:object];
//note: this will put the entire returned object in your mutable array

その後、ブロックの外で:すべてのスーパーバイザーを一覧表示します。

 for (PFObject *supervisor in self.supervisors) {
        NSLog(@"supervisor info:%@",supervisor);
 }

リストの4番目のスーパーバイザーを取得するには:

PFObject *superVisorNumber4 = [self.supervisors objectAtIndex:4];

そのスーパーバイザーから電話番号を取得するには(これを構成します:)

NSString *phone = [superVisorNumber4 objectForKey:@"phone"];

それが役立つことを願っています

于 2013-03-12T03:23:58.247 に答える