メソッドが別のクラスで呼び出されたときに、別のオブジェクトのプロパティを変更したい。
このオブジェクトのプロパティを変更するコードは、最初のクラスのメソッドにあり、独自のクラスから呼び出すと機能しますが、他のクラスから呼び出すと、メソッド内のオブジェクトは nil を返します。
コードは次のとおりです。
ViewController.h
@interface ViewController : UIViewController {
UIView *menuView; //the object
}
@property (nonatomic, retain) IBOutlet UIView *menuView;
-(void)closeMenu; //the method
@end
ViewController.m
@implementation ViewController
@synthesize menuView;
-(void)closeMenu{
[menuView setFrame:CGRectMake(menuView.frame.origin.x, -menuView.frame.size.height, menuView.frame.size.width, menuView.frame.size.height)];
NSLog(@"%f", menuView.frame.size.height); //returns height when method is called from it's own class. But returns 0 (nil) when called from the other class.
}
SDNestedTableViewController.h (特に重要なことはありませんが、役に立ちますか?)
@interface SDMenuViewController : SDNestedTableViewController{
}
SDNestedTableViewController.m
#import "SDMenuViewController.h"
#import "ViewController.h"
- (void) item:(SDGroupCell *)item subItemDidChange:(SDSelectableCell *)subItem
{
ViewController *firstViewController = [[[ViewController alloc] init] autorelease];
SelectableCellState state = subItem.selectableCellState;
NSIndexPath *indexPath = [item.subTable indexPathForCell:subItem];
switch (state) {
case Checked:
NSLog(@"Changed Sub Item at indexPath:%@ to state \"Checked\"", indexPath);
[firstViewController closeMenu]; //called from other class
break;
case Unchecked:
NSLog(@"Changed Sub Item at indexPath:%@ to state \"Unchecked\"", indexPath);
break;
default:
break;
}
}