2011-09-15 10 views
0

これは私の最初のプロジェクトであり、すべてこれを見てもまだ新しいです。しかし、私はスタックオーバーフローコミュニティに完全な信念を持っています。NSloggingとNSString Conundrum

私はあなたのためにかなり興味深い謎を持っています。私は標準を呼ぶ:私のテーブルビューで

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

それはビューコントローラをプッシュしていて、文字列(下記の方法)の値を更新する(文字列の変化は異なる方法でNSLoggedさ):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
appDelegate.baseURL = nil; 
musicInteractionController = [[xSheetMusicViewController alloc]init]; 
if (indexPath.row == 0 && indexPath.section == 0) { 
    appDelegate.baseURL = @"mussette.pdf"; 
    [self.navigationController pushViewController:musicInteractionController animated:YES]; 
} 
else if (indexPath.row == 1 && indexPath.section == 0) { 
    appDelegate.baseURL = @"Importing PDF's.pdf"; 
    [self.navigationController pushViewController:musicInteractionController animated:YES]; 

} 
else if (indexPath.row == 2 && indexPath.section == 0) { 
    appDelegate.baseURL = @"Example.pdf"; 
    [self.navigationController pushViewController:musicInteractionController animated:YES]; 

} 
else if (indexPath.section == 1) { 
    appDelegate.baseURL = [[ivContentsList objectAtIndex:indexPath.row]lastPathComponent]; 
    [self.navigationController pushViewController:musicInteractionController animated:YES]; 

} 
[musicInteractionController release]; musicInteractionController = nil; 
appDelegate.baseURL = nil; 

マイコードには、エラー、警告、またはメモリリークはありません。そして、現在のPDFを表示するためにビューを更新する新しいView Controllerによって読み取られた文字列の変更。これは正しく動作しますが、NSLog値の変更にもかかわらず、同じPDFを繰り返し表示し続けます。役立つ場合は、実際のデバイスではなくiOSシミュレータを使用しています。

ここでは、最初のセルをプッシュした後のNSLogサンプルを示します。次に、nilビューのコントローラログを無視します(バグだと思います)。また、無視されCGContextClipToRectを解決することができるものにボーナス:無効なコンテキスト0x0の警告):事前に

2011-09-15 16:24:23.731 SheetMuse[43068:b603] value - (null) 
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0 
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0 
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0 
Sep 15 16:24:27-MacBook SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0 
2011-09-15 16:24:27.050 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c5e220>. 
2011-09-15 16:24:27.069 SheetMuse[43068:b603] value - mussette.pdf 
2011-09-15 16:24:27.072 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4e74620>. 
2011-09-15 16:24:27.097 SheetMuse[43068:b603] value - mussette.pdf 
2011-09-15 16:24:33.944 SheetMuse[43068:b603] Down 
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextClipToRect: invalid context 0x0 
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextGetClipBoundingBox: invalid context 0x0 
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGContextConcatCTM: invalid context 0x0 
Sep 15 16:24:36 MacBook-SheetMuse[43068] <Error>: CGBitmapContextCreateImage: invalid context 0x0 
2011-09-15 16:24:36.587 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c54bf0>. 
2011-09-15 16:24:36.588 SheetMuse[43068:b603] value - Importing PDF's.pdf 
2011-09-15 16:24:36.590 SheetMuse[43068:b603] Application tried to push a nil view controller on target <UINavigationController: 0x4c50790>. 
2011-09-15 16:24:36.591 SheetMuse[43068:b603] value - Importing PDF's.pdf 

感謝。ここで

+0

のための問題を修正し、どのような方法それはappDelegate.baseURLを読み込み、pdfを読み込みますか?その方法を示してください。 – Anna

+0

遅れて申し訳ありません。 appDelegate.baseURLは、NSURLからCFURLRefとして次のビューの - (id)initメソッドにロードされます。 – CodaFi

+0

上記のコードでは、baseURLは_after_ initが設定されているので、initが実行されると前の値を読み込みます。 – Anna

答えて

2

は、最初のセルを押した後、サンプルのNSLogで、2番目の は(私はそれはバグだと思う、nilのビューコントローラのログを無視します。また、ログダウン は、2番目のビュー内のプライベートメソッドからですので、それはまた は無視することができ、CGContextClipToRectを解決することができるものにボーナス:無効なコンテキスト0x0の警告)

は、私はこれらが関連していないことを考えるように誘惑されて知っているが、それはすることが重要ですバグは雪玉のようなものであることを忘れないでください。

musicInteractionController = [[xSheetMusicViewController alloc]init]; 

ログは、あなたのmusicInteractionControllerがnilであることを示しているようです。私はxSheetMusicViewControllerのためのあなたのinitコードを見ていない(ところで、私はクラスと変数の命名のためにアップルの提案を使用することをお勧めします:クラスは大文字で始まり、小文字で始まります)私は理由は言えませんが、UIViewControllerのサブクラスはおそらく - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundleをinitに使用します。

あなたがnil view controllerを解決すれば、他のバグは解決されると思います。

更新

From Apple's docs:

これは、このクラスの指定イニシャライザです。

指定したnibファイルはすぐにロードされません。ビューコントローラのビューに初めてアクセスすると、 が読み込まれます。nibファイルのロード後に で追加の初期化を実行する場合は、 がviewDidLoadメソッドをオーバーライドしてそこでタスクを実行します。

あなたはnibNameパラメータにnilを指定した場合、あなたは loadViewメソッドをオーバーライドして、そこにあなたのビューを作成するか、名前が(.nib拡張子なし) は名前と一致するあなたのバンドル内 nibファイルを提供しなければならない必要がありますどちらかあなたのビューコントローラクラスの。 (後者の場合、 はクラス名がnibNameプロパティに格納された名前になります)。 のいずれも指定しない場合、ビューコントローラは ビューをロードできません。

したがって、クラスのloadViewメソッドですべてを設定する必要があります。あなたはその方法をどのように実装したかを教えてくれますか?

+0

私はプッシュされているビューでxibを持っていません。むしろ私は - (id)initと呼んでいます。また、musicInteractionControllerは実際のView Controllerのサブクラスなので正しいです。私が前に言ったように、ビューは完全にPDFをロードしていますが、それは1つのpdfだけをロードしています。これはNSStringの問題であり、ビューコントローラの問題ではありません。 – CodaFi

1

これまでにこの問題があったため、いくつかのデバッグを行ったので、実際にテーブルではなくアクティブなビューに基づいてテーブルをスクロールすると、インデックスが変化することがわかりました。

int someIndexVar = [indexPath indexAtPosition: [indexPath length] - 1]; 

if (someIndexVar == 0 && someIndexVar.section == 0) { 

EDITしてみてください: すなわち、各if文ごとに、すべての項目の後

return cell; 

を追加します。

はこれでインデックスを呼び出して試してみてください

if (this){ 
    code 
    return cell; 
} else if (this){ 
    code 
    return cell; 
} else { 
    code 
    return cell; 
} 

ほとんどの人は、セルが毎回返送する必要はありませんと言うが、それが持っているそのAN以来、if文と選択した場合にのみセルを返し、xSheetMusicViewControllerで私

+0

チップをありがとう、以前と同じ動作があります。私はセルをクリックして、NSLogs適切な値をし、すべての行に対して同じPDFをプッシュします。 – CodaFi

+0

答えが更新されました。 – Matt

+0

Matt、投稿したセルを繰り返し返信しています。アナ・カレーナナは正しいアイデアを持っています。彼女のコメントを読んでください。 – CodaFi