jam*_*mur 32 iphone cocoa-touch objective-c
我正在试图弄清楚iPhone的SQLite功能,我在从重写的UITableViewDataSource函数读取我的数据库文件时遇到了一些问题.我在我的应用程序委托中将数据库文件位置存储在ivar(作为NSString)中,但是当我尝试从重写的UITableViewDataSource函数访问该字符串时,它返回一些其他对象.如果我从任何类自己的实例方法访问字符串,它工作正常.
有没有办法从重写的UITableViewDataSource函数中访问应用程序委托?
Rog*_*Rog 75
Application是一个单例,它维护对app委托的引用.您始终可以使用以下方式访问您的应用代理:
[UIApplication sharedApplication].delegate
Run Code Online (Sandbox Code Playgroud)
您可能需要将返回值转换为您自己的app委托类以消除警告.更好的是,编写一个返回你的upcast app delegate的访问器:
#pragma mark access to app delegate etc.
+ (MyAppDelegateClass*) sharedAppDelegate; {
return (MyAppDelegateClass*)[[UIApplication sharedApplication] delegate];
}
Run Code Online (Sandbox Code Playgroud)
mmc*_*mmc 22
Roger是正确的,但我个人觉得在同一语句中混合使用点语法和括号语法非常困惑.
如果这也让您感到困惑,那么仅使用括号表示法的等效语法是:
[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)
是的,您可能需要将结果转换为您的应用程序委托类,而不是通用的UIApplicationDelegate类,否则您很可能会获得许多编译器警告.
虽然我不喜欢在我的AppDelegate中过多地使用它,但我经常需要访问它以获取我的应用程序中的其他单例,这使得方法调用+转换有点麻烦.因此,在我的大多数应用程序中,我将在我的全局头文件中定义一个快速宏.
示例如下:
#define MY_DELEGATE (AppDelegate*)[[UIApplication sharedApplication] delegate]
Run Code Online (Sandbox Code Playgroud)
引用它要容易得多MY_DELEGATE.
事实证明问题非常简单。我使用 stringByAppendingPathComponent: 创建了 NSString 来保存数据库文件的路径。我没有意识到这将被自动释放,所以我没有费心去明确地保留它。它返回不同类型的对象的原因是因为一旦字符串被自动释放,内存就被重用了。
显式保留保存数据库文件路径的字符串解决了这个问题。
| 归档时间: |
|
| 查看次数: |
31703 次 |
| 最近记录: |