0

2 つのファイルがあり、それらの間で情報をやり取りしようとしています。基本的に、メソッドのどの部分を使用するかを決定するために使用する Boolean プロパティがあります。表示用にこのブール値のプロパティを返すインスタンス メソッドを作成しました。最初のコントローラーでは、プロパティを作成して設定し、メソッドを作成します。2 番目のコントローラーでは、クラスのインスタンスを作成し、メソッドを呼び出して、BOOL の値を確認します。問題は、呼び出したときに正しい答えが得られず、常に0になることです。誰かが理由を説明できますか? ありがとう。2 番目のファイルには、注釈を使用する mapView があるため、マップ上のピンをクリックするとタイトル プロパティが呼び出されます。

最初のファイル: TableViewController

#import "MyTableViewController.h"
#import "FlickrFetcher.h"
#import "myTableViewControllerPhotoLocation.h"
#import "FlickrImageViewController.h"
#import "FlickrPhotoSort.h"
#import "MapViewController.h"
#import "FlickrPhotoAnnotation.h"

@interface MyTableViewController () <MapViewControllerDelegate>
//This is declared in header
@property bool photoStage;
@end

@implementation MyTableViewController
@synthesize photoStage= _photoStage;

-(BOOL) currentPhotoStage{
NSLog(@"PhotoStage = %@", self.photoStage);
return self.photoStage;

}

-(void) setphotoStage: (bool) photoStage{
if(!_photoStage) _photoStage = NO;
else {
    _photoStage = photoStage;
}

 }

-(NSArray*) mapAnnotations{

NSMutableArray *annotations= [NSMutableArray arrayWithCapacity:[self.photoArray count]];
for(NSDictionary *photo in self.photoArray)
{
[annotations addObject:[FlickrPhotoAnnotation annotationForPhoto:photo]];
}
//I set the value of self.photoStage here
self.photoStage = YES;
//Prints out 1
NSLog(@"%d", self.photoStage);
return annotations;

 }

PhotoAnnotation という 2 番目のファイル

#import "FlickrPhotoAnnotation.h"
#import "FlickrFetcher.h"
#import "MapKit/Mapkit.h"
#import "MapViewController.h"
#import "MyTableViewController.h"

@interface FlickrPhotoAnnotation ()
@property (nonatomic,strong) MyTableViewController* mapCheck;
@end

@implementation FlickrPhotoAnnotation
@synthesize photo=_photo; //This is a dictionary
@synthesize mapCheck = _mapCheck;

ここで問題発生

-(NSString*) title{ //gets called on click of annotation in map
// ALWAYS RETURNS 0 hence if statement fails
NSLog(@"photoStage = %d", [self.mapCheck currentPhotoStage]);
if([self.mapCheck currentPhotoStage])
{
    NSLog(@"title = %@", [self.photo objectForKey:FLICKR_PHOTO_TITLE]);
    NSString *title = [self.photo objectForKey:FLICKR_PHOTO_TITLE];
    if([title isEqualToString:@""]) title = @"No Title";
    NSLog(@"title = %@", title);
    return title;
}else {

NSString * cellTitle = [self.photo objectForKey:@"_content"]; 

NSRange cellRange = [cellTitle rangeOfString:@","];

NSString * cellMainTitle = [cellTitle substringToIndex:cellRange.location];


return cellMainTitle;
//[self.photo objectForKey:FLICKR_PHOTO_TITLE];
}
}
4

1 に答える 1

1

常に 0 を取得する理由は、MyTableViewController の新しいインスタンスを作成したためです。これは、値を設定したインスタンスと同じではありません (プロパティは変更するまで 0 または nil に設定されているため、0 を取得するのはそのためです)。最初のView Controllerへの参照を取得する必要があります-方法はわかりません。アプリの全体的な構造によって異なります。別のアプローチは、通知を使用することです。

于 2012-08-13T02:47:03.043 に答える