我试图在Cocoa Touch中围绕控制器.主要问题是我希望同时在屏幕上显示多个控制器 - 我希望有一个大视图(控制器A)由他们自己的控制器控制的较小视图组成(比如说B).我希望这样做,因为该部门使代码更清晰.有什么不好的是,附加控制器(B类)不是屏幕上的"一等公民",例如他们没有收到自动轮询查询和通知.(并且无法轻松显示模态控制器,他们必须将presentModal…消息发送到其父控制器.)
Cocoa观点的A和B控制器之间有什么区别?系统是否保留某种指向"最前面的控制器"的指针,这是一个特权的指针,它发送通知和这些东西?为什么其他控制器不接收它们,即使它们的视图在屏幕上?在屏幕上有多个控制器被认为是黑客?或者它是否受到支持,我只是错过了一些观点?谢谢.
更多关于我试图解决的问题:我正在编写一个简单的照片浏览器.照片以全屏显示,用户可以向左或向右滑动以更改照片.A控制器负责滚动部分,B控制器负责处理每张照片本身.
隔离B似乎是一个好主意,因为照片是从网络加载的,并且有很多可能发生的事情,比如网络可能已经停止等等.在B控制器中,代码非常简单,因为B仅适用于一张特定的照片.如果我将代码移动到A控制器,事情会变得混乱.
我唯一不喜欢当前的解决方案是我必须手动解决B不是"一流"控制器.我必须通过A到B手动传递一些调用,当B想要显示模态对话框时,它必须发送presentModal…给A.这很难看.
我想声明一个公共不可变属性:
@interface Foo
@property(strong, readonly) NSSet *items;
@end
Run Code Online (Sandbox Code Playgroud)
...在实现文件中以可变类型支持:
@interface Foo (/* private interface*/)
@property(strong) NSMutableSet *items;
@end
@implementation
@synthesize items;
@end
Run Code Online (Sandbox Code Playgroud)
我想要的是实现中的可变集合,当从外部访问时,它会被转换为不可变的集合.(我并不关心调用者是否可以将实例强制转换NSMutableSet并打破封装.我住在一个安静,体面的城镇,这样的事情不会发生.)
现在我的编译器将属性视为NSSet实现内部.我知道有很多方法可以让它工作,例如使用自定义getter,但有没有办法简单地使用声明的属性?
是否有理由NSDictionary将其键返回NSArray而不是NSSet?文档已经指出数组中键的顺序是未定义的,使用集合听起来合乎逻辑.
我在Xcode中有一个项目,还有一些项目资源.资源包含几个符号链接.当Xcode构建项目时,它会复制资源,但不会解析符号链接.有没有办法让Xcode解析链接?(即复制链接目标而不是链接本身.)
更新:谢谢,mouviciel,差不多就是这样.起初我尝试使用"复制文件"阶段进行此操作,但pbxcp此阶段调用的程序也没有解析链接,即使有一些调用的开关-resolve-src-symlinks.我最后添加了一个运行脚本阶段调用这样的东西:
rsync -pvtrlL --cvs-exclude \
$PROJECT_DIR/../Resources* \
$BUILT_PRODUCTS_DIR/$CONTENTS_FOLDER_PATH
Run Code Online (Sandbox Code Playgroud)
幸运的副作用是我不再需要更新Xcode中的Resources组,无论在Resources目录中完成的任何更改是否立即可见.
我应该多久调用一次和/ glEnable()或glEnableClientState()相应的OpenGL函数glDisable?它们是否应该在应用程序开始时调用一次,还是应该禁用它们并且仅启用我立即需要绘制某些内容的那些功能?有性能差异吗?
我在我的应用程序中有自定义按钮,我已经设置了图像.我想从按钮获取图像并存储在UIImage变量中.请指导我.
我已经将NSMutableArray子类化如下:
基类:
@interface MyBaseMutableArray : NSMutableArray {
// Database variables
NSString * databaseName;
NSString * databasePath;
}
@property (nonatomic, retain) NSString * databasePath;
- (id)initWithContentsOfSQLiteDB:(NSString *)dbTable;
-(void) checkAndCreateDatabase;
-(void) readFromDatabase;
@end
Run Code Online (Sandbox Code Playgroud)
子类:
@interface IngredientsMutableArray : MyBaseMutableArray
{
}
-(void) readFromDatabase;
@end
Run Code Online (Sandbox Code Playgroud)
当我创建一个IngredientsMutableArray时,我执行以下操作:
IngredientsMutableArray * i = [[IngredientsMutableArray alloc]
initWithContentsOfSQLiteDB:@"MyIngredientsDB.sql"];
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行[self addObject:ingred]时,我抛出异常如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSArray count]: method only defined for abstract class. Define -[IngredientsMutableArray count]!'
Run Code Online (Sandbox Code Playgroud)
我相信我没有正确初始化NSMutableArray.我打算给我们initWithCapaciity,但我不知道SQL调用之前的计数.我认为我忽略了一些显而易见的事情,但对于Objective CI来说,有些新手却有点迷茫.
任何帮助表示赞赏.
I have some social sharing code that looks like this:
SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:…];
[composer setInitialText:…];
[composer addURL:…];
[composer setCompletionHandler:^(SLComposeViewControllerResult result) {
[someController dismissViewControllerAnimated:YES completion:^{
… // 1
}];
}];
[someController presentModalViewController:composer animated:YES];
Run Code Online (Sandbox Code Playgroud)
The problem is that the code behaves differently for Facebook and Twitter. When the user confirms the Facebook compose screen, the composer apparently dismisses itself, because the completion handler marked as 1 is never called and even when I remove the dismissViewControllerAnimated: call, everything works fine. …
我想拍摄一些视频帧并将它们编码成视频.看起来这正是它的AVAssetWriter意思,但无论我如何看待文档和谷歌我都找不到任何方法来实际使用它.从文档中看起来我需要一个input(AVAssetWriterInput)来从中提供编写器.精细.但是这个AVAssetWriterInput类是抽象的,我在4.1中知道的唯一子类是AVAssetWriterInputPixelBufferAdaptor它AVAssetWriterInput在初始化器中需要一个......?我错过了一些明显的东西吗?
ios ×3
objective-c ×3
avfoundation ×1
cocoa ×1
cocoa-touch ×1
deployment ×1
iphone ×1
maintenance ×1
nsdictionary ×1
opengl ×1
perl ×1
properties ×1
symlink ×1
uibutton ×1
xcode ×1