Day: April 10, 2014

obj.C:泣けて来る、やっとわかった。DOMDocument

ようやくわかりました。
saveは、- (DOMDocument *)mainFrameDocumentを使えば良さそうですね。

WebViewをsaveするには、– (DOMDocument *)mainFrameDocumentを使えばいいということがようやくわかりました。一日一善のペースですから、とても時間がかかっています。それでも前に進んでいるので良しとします。

WebDataSource *dataSource = [[xbWebView mainFrame] dataSource];だと、Returns the main frame, the root of the web frame hierarchy for this page.になります。rootですから、URLまで辿(たど)られてしまいます。

次に、WebDataSource *dataSource2 = [[xbWebView webFrame] dataSource];ならどうかとやったのですが、exception errorで落ちてしまいます。WebDataSourceはお門違いで、WebViewから探してこいということのようです。

それで、昨夜からDOMが頭の片隅に引っかかっていたので、DOMDocument *dataSource2 = [xbWebView mainFrameDocument];を使ったら、URLを読み込んだ画面を編集したものがsaveでき、OKになりました。「ヤッター」と叫びたい感じです。

論理的でないのが不都合です。try and errorでは時間がかかります。saveしたファイルをSafariで描画したら狙い通りだったので、結果はOKです。このあと、作ったファイルを戻す方法を確立します。

そのあと、dataを使って配列を一回の書き込みでsaveすることができるかどうか確認します。
➡配列のread/writeは、NSUserdefaultsにNSMutablearrayを格納する/読み出すにやり方が書いてありました。これで配列のread/writeもOKになりました。

IMG_3307丸田池公園 2014.4.10

IMG_3303もう春もおわったのかなあ?初夏の暑さ!

WordPressの技術レベル?

WordPressの技術レベルに疑問があります。新機能をリリースするとき、ちゃんとテストしないでできたものをリリースしているのでは?それでは、ユーザーは評価台です。やり方が10年古いです。

またしてもWordPressブログを書いていると、表示と動きがおかしくなりました。ガクガク動くようになり、時々フリーズしてしまいます。いくつかボタンが増えていますから、新機能がリリースされたようです。

技術者のスキルレベルか、そのマネジメントに問題があるのでしょうか?

新機能がリリースされるのはありがたいのですが、動きがおかしかったり、画面表示がおかしくなったりするのは問題です。1990年代のシリコンバレーならbug fixよりか新機能をリリースする方が優先されてあたり前だったかもしれませんが、最近では、Appleでさえ機能追加でおかしくなったというようなレベルの低い話はめったに聞かなくなりました。

こうした基本的な品質問題が出る場合、たいていのケースにおいて、マネージャに問題があります。功を急ぐことが品質問題を助長してしまうのです。解決方法は、担当マネージャをプロジェクトから追放する、技術者か評価チームに問題があれば補強する、の二点です。VPが原因であれば、言うまでもなく、首にするのが妥当でしょうね。そんなことは普通に行われていることです。

この手の問題の本質は、品質問題が出たということにはなく、同じような品質問題が何回も出てしまうことにあります。まちがいはいつでも起きますし、止めようがありません。しかし、何回も同じまちがいを繰り返すのは科学的でないというよりか、無駄そのものです。WordPressの開発体制はいったいどうなっているのでしょうね?

 

obj.C:WebViewについてわかったこと

ここまでのトライアルでわかったことを整理します。

NSDocumentとあるのは、XcodeでDocument-based Applicationをチェックしてプロジェクトを作成すると、@interface Document : NSDocumentのように作成されるケースです。また、NSObjectとあるのは、XcodeでDocument-based Applicationをチェックせずにプロジェクトを作成すると、@interface AppDelegate : NSObjectのように作成されるケースです。

  • NSDocumentもNSObjectもWebkit.frameworkを組み込み、#import <WebKit/WebKit.h>を定義すればWebViewが動作することが確認できました。
    しかし、@interface{  }の中で IBOutlet WebView *xbWebViewのWebView変数にInterface Builder(IB)で接続することはできませんでした。接続する前にbuild errorが出たからです。
    ➡不完全燃焼。
  • NSObjectの場合、AppDelegate.hに定義したWebView変数にInterface Builder(IB)で接続するには、@property (assign)  IBOutlet WebView *xbWebViewのようにpropertyで定義し、.mで@synthesize xbWebView;と定義すればうまく接続できました。

結論:
1. NSObjectのプロジェクトを作成します。言い換えると、Document-based Applicationにチェックを入れないでプロジェクトを作成します。
2. AppDelegate.h/.mとは別にViewCont.h/.mを作ります。

3. Webkit.frameworkを組み込みません。
4. #import <WebKit/WebKit.h>を定義します。
補1. AppDelegate.hIBOutlet WebView *xbWebViewを定義したい場合、@property (assign) IBOutlet WebView     *xbWebView;と定義し、AppDelegate.mで@synthesize xbWebView;と定義すれば利用可能になります。
補2. ViewCont.h/.mでは、@interface ViewCont : NSObject
<NSApplicationDelegate, NSTableViewDataSource, NSTextViewDelegate> {  }の中でIBOutlet WebView *xbWebView定義できます。

思うに、Xcode 5からWebkit.frameworkを組み込まなくても動くようになったのかもしれません。この手順でまちがっているとまた元に戻って考えないといけないので、念のためもう一度最初からプロジェクトを作成してやり直し、OKであることを再確認しました。これで大丈夫です。

どうすればOKになるのかわかったので、WebViewを編集したキャッシュをsaveできるのかどうか、元々やりたかったことを調べることにします。

追記:frameworkの組み込み方

1. projectをクリック
2. Build Settinsをクリック3. Link Binary With Librariesをクリック➡+で追加できる。

スクリーンショット 2014-04-10 09.35.46志摩泊の公園の八重桜 2014.4.7