2012-08-13 80 views
0

我有两个文件,我试图在它们之间传递一些信息。基本上我有一个布尔属性,我用它来决定我应该使用什么方法的一部分。我创建了一个实例方法,该方法返回此布尔值属性以供查看。在我的第一个控制器中,我创建了属性并设置了它,并创建了方法,并在第二个控制器中创建了该类的一个实例,并调用该方法来查看BOOL的值。问题是我打电话时没有得到正确的答案,我总是得到0.有人可以解释为什么吗?谢谢。在第二个文件我有使用说明一个MapView等多项称号属性,都会叫上在销的地图上点击从另一个控制器目标调用实例方法C

第一个文件: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

#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]; 
} 
} 
+0

0是bool数据类型的默认值。所以,如果它没有设置,那么它总是会出现0. – Dustin 2012-08-13 02:48:31

回答

1

你总是得到0的原因是因为因为你已经创建了一个MyTableViewController的新实例 - 它不是你设置该值的实例(因为属性设置为0或零,直到你改变它们,这就是为什么你得到0)。你需要得到你的第一个视图控制器的引用 - 我不知道如何,这取决于你的应用程序的整体结构。另一种方法是使用通知。

+0

嗯我不知道,谢谢,这使得它更清晰,我最终完全删除财产,并得到它的工作,再次感谢 – 2012-08-13 03:11:54

相关问题