我经常觉得需要将Objective-C代码拆分成多个文件以提高可读性.我想避免上课并打电话给他们.我想简单导入(比如在php中).
如果有人可以请参考一个有效的例子.
我面临着一个奇怪的问题.我正在使用libzbar开发一个iOS命令行条形码扫描器实用程序(是的,这是用于越狱设备).一切顺利,除非我正在尝试使用CGImageCreateWithPNGDataProvider()或CGImageCreateWithJPEGDataProvider()方法CGImageRef从文件中获取- 因为这两个函数在我的5.1.1 iPad上抛出一个段错误.问题不在我的自定义类中ZBarScanner,因为如果我使用UIImage获取图像数据,请使用类似的东西
UIImage *uiImage = [UIImage imageWithContentsOfFile:fname];
CGImageRef image = uiImage.CGImage;
Run Code Online (Sandbox Code Playgroud)
然后它工作正常并打印存储在条形码中的数据.此外,PNG和JPEG图像格式正确 - 我可以使用设备本身的文件浏览器查看它们,我也尝试了其他几个图像.我甚至试图省略所有CFRelease()函数调用和release消息,以避免有悬空指针.这是我的代码:
#define LOG() NSLog(@"Reached line %d", __LINE__)
int main(int argc, char **argv)
{
if (argc != 2)
return 1;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
LOG(); // line 21
NSString *fname = [[NSString stringWithUTF8String:argv[1]] retain]; // added an extra retain just in case
LOG(); // line 25
CFDataRef data = (CFDataRef)[NSData dataWithContentsOfFile:fname];
CGDataProviderRef dProv …Run Code Online (Sandbox Code Playgroud) 我对类似printf的格式字符串的理解是你可以为任何转换说明符添加最小字段宽度的前缀.这对Cocoa的%@说明符似乎不起作用.例:
NSLog(@"'%5@'", @"foo");
NSLog(@"'%5s'", [@"foo" UTF8String]);
Run Code Online (Sandbox Code Playgroud)
输出:
… 'foo'
… ' foo'
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?
我有一个NSCollectionView我确实有一个dataArray和它selectedIndexes NSIndexSet定义的File's Owner.(因为我有工作的MonoMac上项目我有一些麻烦,一个简单的工作NSArrayController,所以我决定实施源代码呢).当初始化我的控制器,我加入了一些数据(NSMutableDictionaryS)的dataArray.当应用程序显示它的窗口时,我刚刚添加的所有数据都显示得很好.
问题是对数据源的更改不会以任何方式影响接口.当我从数据源添加,更改或删除项目时,接口是否应该自动更新,因为我使用相应的键绑定了值?
我错过了什么吗?有什么想法吗?
非常感谢
-f
cocoa key-value-observing cocoa-bindings nscollectionview monomac
我用a NSInputStream来读取文件中的数据.如果maxLength大于49152 ,它将崩溃.
当它崩溃时 - 有时候,但不是每次都崩溃,它会给出这样的信息:
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'*** - [NSConcreteData initWithBytes:length:copy:freeWhenDone:bytesAreVM:]:荒谬长度:4294967295,最大大小:2147483648字节'
根据我的计算,524288仍然小于该最大值,并且可以适合返回值.我错过了什么?
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode)
{
case NSStreamEventHasBytesAvailable:
{
NSInteger bufferSizeNumber = 524288; //this one will crash.
// NSInteger bufferSizeNumber = 491520; // this one will work.
uint8_t buf[bufferSizeNumber];
unsigned int len = 0;
len = [_stream read:buf maxLength:bufferSizeNumber]; //crashing at this line
// more code ...
}
// more code...
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:(我认为这是该行为的关键部分)
如果我在后台线程中"启动",则bufferSizeNumber的行为如上所述.但是如果我在主线程中"启动",则bufferSizeNumber在崩溃之前可以达到943713.
- (void)start
{
_stream.delegate = self;
[_stream scheduleInRunLoop:[NSRunLoop currentRunLoop] …Run Code Online (Sandbox Code Playgroud) 我对这些方面感到困惑.我在网上搜索.但每个网站都给出了不同的解决方案.我是这项技术的新手.所以请提供更正此差异的清单和定义.
我想把窗口分成两部分.每个部分我都可以画出不同的东西.我怎么能在openGL中做到这一点?
(实际上,我的问题是我已经在窗口上画了一张照片.现在我想从中获取一些"空间",这样我就可以画出其他内容.原始图片已经占据了整个窗口).
如果有人能提供帮助,我感激不尽.
谢谢.
我正在尝试在我的应用程序库目录中的子目录中创建文件.首先,我正在通往图书馆这样的道路:
- (NSURL*) getLibraryDirectory
{
NSFileManager* manager = [NSFileManager defaultManager];
NSArray* paths = [manager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask];
if ([paths count] > 0)
{
return [paths objectAtIndex:0];
}
return nil;
}
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码创建子文件夹:
- (NSURL*) getDirectory:(NSString*)subdirName
{
NSFileManager* sharedFM = [NSFileManager defaultManager];
NSURL* libraryDirectory = [self getLibraryDirectory];
if (libraryDirectory)
{
NSURL* subdir = [libraryDirectory URLByAppendingPathComponent:subdirName isDirectory:YES];
if (![sharedFM fileExistsAtPath:[subdir absoluteString] isDirectory:YES])
{
NSError* error;
if ([sharedFM createDirectoryAtURL:subdir withIntermediateDirectories:YES attributes:nil error:&error])
{
return subdir;
}
else
{
NSLog(@"Error occured while trying to create subdirectory …Run Code Online (Sandbox Code Playgroud) 我正在使用NSNumberFormatter将我的数字格式化为字符串。我有一个希伯来语(以色列)区域格式(设置->常规->国际->区域格式)的设备。例如,当我尝试格式化数字 100 时,我得到 100 $。我的目标是去掉货币符号前的空格,只得到 100 美元
我可以正确显示中文字符但是当我尝试显示阿拉伯字符串时,OpenGL场景中显示的输出与Visual Studio编辑器中显示的阿拉伯字符串不同.我知道它应该与"复杂脚本"有关,但我无法找到关于此事的任何好的例子.我想知道如何正确显示阿拉伯语文本?