0

次のページの Java のチュートリアルに基づいています: http://tutorials.jenkov.com/java-persistence/dao-manager.html ,

iOS用のxCodeで同じ概念を実装しようとしています。

目標は、 DAOManager を提供することです: DAOCommand (プロトコルとして定義) + 彼の execute メソッドの実装。プロトコルを実装する特定のインターフェイスを作成することもできますが、前述の例のように、呼び出すときにメソッドを実装したいと考えています。私が正しければ、BLOCKを使用してobjective-cでそれを達成することが可能です。

上記のページで提供されている Java コードの例:

 public interface DaoCommand {
   public Object execute(DaoManager daoManager);
 }

CRUD サービスを要求するコードのサンプル:

  DaoManager daoManager = daoFactory.createDaoManager();
  Person person = (Person)
  daoManager.executeAndClose(new DaoCommand(){

    public Object execute(DaoManager manager){
      return manager.getPersonDao().readPerson(666);
    }

  });

私は次の方法でそれを実装しようとしました: 1/ DAOCommand:

@protocol IDaoCommand

- (id) executeUsingManager:(DAOManager*)pDAOManager;

@end

2/ DAOManager を呼び出すメソッド getListOfPoi を持つ私の PoiCRUDService インターフェース:

- (id) getListOfPoi {

DAOFactory* daoFactory = [[DAOFactory alloc] initWithOfflineMode:YES];
DAOManager* daoManager = [daoFactory createManager];

[daoManager executeAndCloseDaoCmdBlock:^(id<POIDAO> pPoiDAO) {
    [pPoiDAO getListPoi];
}];
 }

3/ executeAndClose メソッドを持つ私の DAOManager :

- (id) executeAndCloseDaoCmdBlock:(id(^)(id<IDaoCommand>))pDaoCmdBlock {

// Execute the query
//id returnObject = [[self getPoiDAO] getListPoi];
id returnObject = pDaoCmdBlock(self);

// Close the connection
[self.dataSource closeConnection];

return returnObject;
}

コードを見ると、DAOEntity (POIDAO) が作成されていません。実際、サンプル Java コードを xCode に変換する方法を理解するのに苦労しています。ステップと方法に関するアイデアはありますか?

アイデアやアドバイスをありがとう。セント。

4

1 に答える 1

0

これが私の一見からの提案です。DaoCommandJavaには関数型がないため、関数オブジェクトインターフェイスとしてのみ使用されているようです。Objective-C では、ブロック型のみを使用できます。DaoCommand便宜上、それを typedef できます。

typedef id (^DaoCommand)(DaoManager *);

そして、サンプルの正確な翻訳は次のようになります。

DaoManager *daoManager = [daoFactory createDaoManager];
Person *person =
[daoManager executeAndClose:^(DaoManager *manager){
    return [[manager getPersonDao] readPerson:666];
 }];

他の関数については、Java コードが表示されないため、何の助けにもなりませんが、型(ブロック型)executeAndClose:の引数を受け取る必要があります。DaoCommandブロックの通常のコーディング規則に従っていることを確認してください。設定する必要があります。

于 2012-11-29T21:17:33.213 に答える