我有一个问题希望你能帮助我。我有一个带有多个故事板视图的应用程序,每个视图都有一个单独的视图控制器。我希望能够在故事板的所有视图中使用我自己的类。这将使每个视图控制器中的代码更加简洁,整个应用程序更易于调试等。该类将包含变量和方法。
我的总体目标是通过按钮从用户那里收集数据,然后将它们存储在数据库中。可以查看和修改数据,以及生成统计数据。
由于大多数变量和方法将在不同的视图和不同的时间使用,我想将所有这些分隔在单独的文件中。
我还可以告诉你,这不是我懒惰的捷径尝试,我已经在互联网上冲浪了很多很多小时,阅读了数百篇文章等,但我仍然离解决方案还差得远。
非常感谢任何输入!
感谢您抽出宝贵时间阅读本文...
SomeClass.h 有以下代码:
#import <Foundation/Foundation.h>
@interface SomeClass : NSObject
{
NSString *dataOne;
NSString *dataTwo;
NSString *dataThree;
}
- (void) SetDataOne: (NSString*) dataOneReceived;
- (void) SetDataTwo: (NSString*) dataTwoReceived;
- (void) SetDataThree: (NSString*) dataThreeReceived;
- (void) saveSomeData;
@end
SomeClass.m 有以下代码:
#import "SomeClass.h"
@implementation SomeClass
- (void) SetDataOne: (NSString*) dataOneReceived {
dataOne = dataOneReceived;
}
- (void) SetDataTwo: (NSString*) dataTwoReceived {
dataTwo = dataTwoReceived;
}
- (void) SetDataThree: (NSString*) dataThreeReceived {
dataThree = dataThreeReceived;
}
- (void) saveSomeData {
// Here I do stuff with dataOne etc…
}
@end
SomeView.h 有以下代码:
#import <UIKit/UIKit.h>
#import "HeadViewController.h"
#import "SomeClass.h"
@interface SomeView : UIViewController
// contains stuff not needed to show here
- (IBAction)Done:(id)sender;
@end
SomeView.m 有以下代码:
#import "SomeView.h"
#import "SomeClass.h"
@interface SomeView ()
@end
@implementation SomeView
- (void)viewDidLoad
{
[super viewDidLoad];
SomeClass *someClassObject = [[SomeClass alloc] init];
// Do any additional setup after loading the view.
}
// Other standard methods omitted
- (IBAction)Done:(id)sender {
[someClassObject SetDataOne: @”whatever text”];
[someClassObject SetDataTwo: @”whatever text”];
[someClassObject SetDataThree: @”whatever text”];
[someClassObject SaveSomeData];
Error Msg for all the above: ”Use of Undeclared Identifier ’someClassObject’
}
@end
评论:您可以在上面的代码末尾看到我收到的错误消息。我不知道我做错了什么。我查看了很多关于如何创建和调用类的示例,但似乎无法解决我的问题。另外,我看到一些“SomeClass *someClassObject = [[SomeClass alloc] init];” 在“main.m 文件”中。如果我理解正确,该文件是应用程序启动时第一个加载的文件。如果是这样,那么我不能把它放在那里,因为我必须在几个不同的视图中创建我的类的实例,而不是应用程序启动时的其他时间。这就是我将它放在 viewDidLoad 方法中的原因。