2011-01-15 11 views
0

基本的にNSTaskを実行するMac OS Xアプリケーションを作成しました。つまり、ファイルを扱うためのクラスXXTaskと、GUIのドラッグ・アンド・ドロップを扱うクラスXXControllerというクラスを作って、今度はファイルを扱うようにXXTaskに依頼しました。Objective-Cのメモリ不足

私は過去にほとんど同じことをしていて、うまくいきました。今回は、デリゲートプロトコルを追加し、XXControllerをXXTaskの代理人にしました。

XXTaskが失敗したとき、私は特定のビューを表示するために、デリゲートを尋ねるため、このようなメソッドを呼び出します。

[delegate showView]; 

これは動作しますが、私は最初の起動時に保存された情報を使用して再起動しようとしたとき、アプリはエラーを出力します。私は正確に何が間違っていたかをNSLogで確認しました.3つのインスタンス変数(2つのNSStringと1つのNSMutableArray)が(null)のようです。

これらは3つのインスタンス変数です:

curFilePath = filename; 
// filename is an NSString passed to the method where I first create curFilePath 
// the object passed to the method is a retained NSString (an instance variable of XXController) 
lastArgs = [[NSMutableArray arrayWithObjects:curFilePath, [curFilePath stringByDeletingLastPathComponent], nil] retain]; 
lastLaunchPath = [[[NSBundle mainBundle] pathForResource:@"xxtask" ofType:@""] retain]; 

すべての3つの変数がnullですが、XXTaskオブジェクトは次のとおりです。私はこのようにそれらを作成

NSString *curFilePath; 
NSArray *lastArgs; 
NSString *lastLaunchPath; 

それはまだコードを実行できるので、そうではありません。

エラー:私はデリゲートを呼び出してビューを描画していない場合は、すべてが大丈夫です

2011-01-15 16:38:57.233 App[24179:a0f] PATH : (null) 
2011-01-15 16:40:52.846 App[24212:a0f] LAST ARGS : (null) 
2011-01-15 16:40:52.847 App[24212:a0f] LAST LP : (null) 
2011-01-15 16:40:52.847 App[24212:a0f] Exception detected while handling key input. 
2011-01-15 16:40:52.848 App[24212:a0f] *** -[NSCFArray insertObject:atIndex:]: index (1) beyond bounds (1) 

。私はそのビューメソッドをXXTaskクラスに置くことができましたが、私はむしろこれを最初にきちんと説明したいと思います。デリゲートに電話するとどうなりますか? (デリゲートプロトコルを使って試したのは初めてです)

ありがとうございました!

  1. 私は長い 時間をいじりてきたが、メモリ管理に ドキュメントを読んで、最も愚かな事をした:

    このコードはあなたに恐ろしい見える場合

    は、私は2つの言い訳を持っています。
  2. 参照カウントのメモリ管理は私には全く新しいものです。私は このような本物の大きなアプリを作ったことはありません 私は通常、 多くの間違っていませんが、この時間のメモリ は、もっと重要です。
+0

この質問にエラーを貼り付けることはできますか? –

+0

オブジェクトがnilであり、XXLastArgsがnullであるために完全に正常な2つのエラーを表示するために3つのNSLogを追加しました(私はXXLastArgsで配列を作成していて、その配列にオブジェクトを追加しています。 )。 – Bruno

+0

@interfacesの関連部分を投稿してください - どこに属しているのかはほとんど分かりません...デリゲート関係を設定してどのように接続していますか? NSTaskが失敗した後にあなたのXXTaskを単に廃棄し、何らかのレイジーロードロジックを間違って再作成したことがありますか?あなたのイヴァールが過剰にリリースされた場合、あなたは最も確かにクラッシュして、そこにヌルを置かないでしょう... – danyowdee

答えて

0

私はこれを正しく理解していれば(コードなしではかなり難しいですが)、XXTaskで保持されている情報を保存していますか?

データを保持/コピーしていますか?そうでなければ、XXタスクが解放されるとすぐに解放されます。 質問を誤解した場合は、問題を示すコードを提供するようお願いします。これにより、エラーを見つけやすくなります。

+0

私はコードを与えたいですが、それは簡単ではありません。私は問題がどこにあるのか正確には分からないので、あなたにどのようなコードを与えるのか分かりません。私はいくつかのことを明確にするために自分の投稿を編集します。回答ありがとうございます! – Bruno

+0

コードとエラーが発生しました。誰かが助けてくれることを願っています... – Bruno