我试图很简单地从appDelegate中设置一个名为'Bank'的类的属性,但它并不像我想的那样工作。不知何故,这些属性在appDelegate类中设置得很好,所以只要我从appDel中调用它的属性,它就可以工作,但只要我从任何其他类调用相同的属性,它们就会返回null。这里是所有相关的代码。从appDelegate设置另一个类的属性
应用Del.m
#import "MusikerAppDelegate.h"
#import "MusikerViewController.h"
@implementation MusikerAppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
@synthesize tbc;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
AudioTableViewController *ATVC = [[AudioTableViewController alloc] init];
MusikerViewController *MusicVC = [[MusikerViewController alloc] init];
tbc = [[UITabBarController alloc] init];
tbc.viewControllers = [NSArray arrayWithObjects: MusicVC, ATVC, nil];
[ATVC release];
[MusicVC release];
Bank *daBank = [[Bank alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
daBank.managedObjectContext = context;
daBank.myDate = [NSDate date];
if (!daBank.myDate) {
NSLog(@"no date at point A");
} else {
NSLog(@"Date at appDel : %@",daBank.myDate);
}
if (!daBank.managedObjectContext) {
NSLog(@"PROBLEM. NO MANAGED OBJECT CONTEXT!! -MUSIKER APP DELEGATE at point A");
}
else {
NSLog(@"ManagedObjectContext created at point A");
NSLog(@"Context: %@",daBank.managedObjectContext);
NSLog(@"PS Coord : %@",daBank.managedObjectContext.persistentStoreCoordinator);
NSLog(@"MOM : %@", daBank.managedObjectContext.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[daBank.managedObjectContext.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]);
}
self.window.rootViewController = self.viewController;
[self.window addSubview:tbc.view];
[self.window makeKeyAndVisible];
return YES;
}
...(更多方法) 不,当我呼吁的NSLog打印它打印一切初始化,可以正常使用的日期,NSManagedObject等。
以下是包含正在设置的属性的类。 Bank.h
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#import "AudioFile.h"
#import "AudioTableViewController.h"
#import "MusikerAppDelegate.h"
@interface Bank : NSObject {
NSManagedObjectContext *managedObjectContext;
NSDate *myDate;
NSString *recPath;
}
@property (retain, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSDate *myDate;
@property (retain, nonatomic) NSString *recPath;
//@property (copy) NSString *docPath;
- (id)init;
+ (NSString *)getDataPath:(NSString *)fileExtDate;
-(BOOL)addAudioFileEntityToModel;
-(BOOL)removeAudioFromModel:(id)audio;
-(NSMutableArray *)getFetchArray;
@end
和实现文件 Bank.m
//
// Bank.m
// Musiker
//
// Created by Lucas Gaylord on 7/7/13.
// Copyright 2013 __MyCompanyName__. All rights reserved.
//
#import "Bank.h"
//#import "AudioFile.h"
@implementation Bank
@synthesize managedObjectContext;
@synthesize myDate;
@synthesize recPath;
//@synthesize docPath = _docPath;
- (NSMutableArray *)getFetchArray {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
if(!managedObjectContext) {
//handel error
}
NSLog(@"AT PLACE A");
NSLog(@"Context: %@",managedObjectContext);
NSLog(@"PS Coord : %@",managedObjectContext.persistentStoreCoordinator);
NSLog(@"MOM : %@", managedObjectContext.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[managedObjectContext.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]);
NSEntityDescription *entity = [NSEntityDescription entityForName:@"AudioFile" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
}
[request release];
return mutableFetchResults;
}
...(更多方法) 现在,当我呼吁的NSLog打印我的设置相同的属性appDel,它们都返回null。这发生在任何地方,无论我在appDel之外获得那些属性。
我不知道是什么问题。我试过调用self.managedObjectContext。在执行Bank.m之前,我已经试过了@class MusikAppDelegate。我已经在应用程序的每个类中向控制台输出了属性,但它们始终返回null,除非它们是从appDel调用的。请解释。
你如何获得银行的实例中,失败的案例? – Wain
@Wain - (Bank *)daBank { if(!daBank){daBank = [[Bank alloc] init]; } \t \t return daBank; } – luca590