我有一个我本地化的plist.如何正确加载plist?
现在,我正在使用此代码:
NSArray *numbersArray = [[NSArray alloc] initWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:@"Numbers" ofType:@"plist"]];
Run Code Online (Sandbox Code Playgroud)
为了加载本地化的plist,我需要将代码更改为什么?
有没有办法在Xcode中重构混合C++/Objective-C代码?我正在使用Cocos2D和Box2D编写游戏,而Box2D是用C++编写的,所以我编写的每个类都应该有.mm扩展名,因此当我尝试重命名变量时,我得到一条消息,如" Xcode只能重构C"和Objective-C代码 ".
提前致谢!
是否可以加载.ai文件并以编程方式打开它们?
这是我尝试过的:
- (IBAction)openDocument:(id)sender
{
QLPreviewController *previewController = [[QLPreviewController alloc] init];
[previewController setDataSource:self];
[previewController setDelegate:self];
[self presentModalViewController:previewController animated:YES];
}
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
return 1;
}
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
return [[NSBundle mainBundle] URLForResource:@"CNW EXPLODED1" withExtension:@"ai"];
}
Run Code Online (Sandbox Code Playgroud)
但输出是这样的:

我已经阅读了Apple的Swift iBook(类型转换和协议)的相关部分,但我似乎找到了一种方法来指定对象是符合特定协议的特定类的实例.
作为一个例子tableView(_: , cellForRowAt: )我希望将由返回的单元格转换tableView.dequeueReusableCell(withIdentifier: reuseID, for: indexPath)为UITableViewCell符合RLMEntityCapableCell协议的子类(只是指定构造item函数有一个变量,称为该实例Object,或其子类之一).
这条路线有效,但双重铸造似乎过度:
protocol RLMEntityCapableCell: class {
var item: Object { get set }
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: reuseID, for: indexPath) as! RLMEntityCapableCell // Cast here so we can set item
cell.item = items[indexPath.row]
return cell as! UITableViewCell // Cast again so the return type is right… …Run Code Online (Sandbox Code Playgroud) 此图像来自SystemPreferences> Appearance

我想知道如何以编程方式获得该值?
我问,因为我正在绘制一个带有自定义标题栏的窗口,我希望它尽可能地与正常(非自定义)可可窗口相似(在行为上).
也许我可以管道的终端命令或是否有一个cocoa API来执行此操作?
编辑:
回答(感谢NSGod)
- (void)mouseUp:(NSEvent *)event{
if ([event clickCount] == 2) {
//Get settings from "System Preferences" > "Appearance" > "Double-click on windows title bar to minimize"
NSString *const MDAppleMiniaturizeOnDoubleClickKey = @"AppleMiniaturizeOnDoubleClick";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// [userDefaults addSuiteNamed:NSGlobalDomain]; // unnecessary
BOOL shouldMiniaturize = [[userDefaults objectForKey:MDAppleMiniaturizeOnDoubleClickKey] boolValue];
if (shouldMiniaturize) {
[self miniaturize:self];
}
}
}
Run Code Online (Sandbox Code Playgroud)
后来我发现可以找到Appearance(Aqua/Graphite):
NSString * const kAppleAquaColorVariant = @"AppleAquaColorVariant";
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// [userDefaults addSuiteNamed:NSGlobalDomain]; // unnecessary
NSNumber *color …Run Code Online (Sandbox Code Playgroud) 我有一个带有大量项目的NSMenuItem,但是...列表没有启用.
我的意思是说:

这是我的代码:
- (void)didFetchNewList:(NSArray *)list
{
NSArray *smallList = [list subarrayWithRange:NSMakeRange(0, 10)];
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
for (NSDictionary *dict in smallList)
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd @ HH:mm:ss"];
NSMenuItem *soMenuItem = [[NSMenuItem alloc] initWithTitle:
[dateFormatter stringFromDate:[dict objectForKey:@"date"]]
action:nil
keyEquivalent:@""];
[soMenuItem setEnabled:YES];
[menu addItem:soMenuItem];
}
[menu addItem:[NSMenuItem separatorItem]];
NSMenuItem *soMenuItem = [[NSMenuItem alloc]
initWithTitle:@"Settings" action:nil keyEquivalent:@"S"];
[soMenuItem setEnabled:YES];
[menu addItem:soMenuItem];
[statusItem setMenu:menu];
[statusItem setEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
我将所有内容设置为已启用,但仍处于禁用状态.我怎么解决这个问题?
我正在从iOS转向Cocoa,并试图搞砸我的前几个程序.我认为添加NSComboBox到我的表单会很简单,那部分就是.我添加<NSComboBoxDelegate, NSComboBoxDataSource>到我的界面,两个数据回调和通知程序:
@interface spcAppDelegate : NSObject <NSApplicationDelegate,
NSComboBoxDelegate, NSComboBoxDataSource>
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index;
- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox;
- (void)comboBoxSelectionDidChange:(NSNotification *)notification;
@end
Run Code Online (Sandbox Code Playgroud)
我控制将组合框拖到app delegate(这是我的简单默认应用程序中唯一的类)并连接了委托和数据源,但这些事件都没有触发.我认为app委托是正确的,但由于它没有触发,我也尝试了"文件所有者"和"应用程序".我不认为那些会起作用而他们没有.
什么是NSComboBox在Cocoa应用程序中连接代理/数据源的正确方法?
谢谢!
我有一个静态NSTextField,在我的OS X应用程序中覆盖了一个大的错误消息.我试图让它允许用户点击它下面的控件.
在IB中,我取消选中"已启用",并且我已选中"拒绝第一响应者"
我也在代码中完成它,因为它不起作用:
[largeErrorText setEnabled:NO];
[largeErrorText setRefusesFirstResponder:YES];
Run Code Online (Sandbox Code Playgroud)
它仍然妨碍了与它下面的物体的互动.任何想法可能是什么?
当执行我gcc从终端编译的任何C程序时,我得到一个权限被拒绝错误.
首先,我已经验证并修复了我的驱动器的权限(在此之前,同样的问题发生了).
为了说明和隔离问题,我将向您展示这个超简单的Hello World程序会发生什么(与其他程序一样,同样的事情发生):
#include <stdio.h>
main()
{
printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
现在,我把它保存到我的桌面上helloworld.c.此时,从桌面ls -l返回:
total 8
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c
Run Code Online (Sandbox Code Playgroud)
然后我编译gcc -c helloworld.c -o helloworld(我也尝试编译没有-o带有相同结果的标志).没有警告或错误.一个ls -l现在返回:
total 16
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c
-rw-r--r-- 1 michael staff 724 Mar 13 14:16 helloworld.o
Run Code Online (Sandbox Code Playgroud)
尝试执行gcc的输出,./helloworld.o返回:
-bash: ./helloworld.o: Permission denied
Run Code Online (Sandbox Code Playgroud)
只是为了调试,如果我用sudo(sudo ./helloworld.o)执行,它返回:
sudo: ./helloworld.o: command not found
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试设置可执行标志chmod …
首先,我一直在阅读有关CocoaLumberjack的一些主题,但我无法找到这个问题的解决方案:
我正在使用CocoaLumberjack登录我的应用程序.但我也想记录应用程序崩溃.
我试过这个:
void uncaughtExceptionHandler(NSException *exception) {
DDLogError(@"CRASH: %@", exception);
DDLogError(@"Stack Trace: %@", [exception callStackSymbols]);
// Internal error reporting
// Send log to SOA
}
Run Code Online (Sandbox Code Playgroud)
但我在appDelegate中收到此错误,在其他地方效果很好:
Use of undeclared identifier '_cmd'; did you mean 'dcmd'?
还有另一种方法吗?
objective-c ×8
cocoa ×5
ios ×4
xcode ×3
cocoa-touch ×2
macos ×2
box2d ×1
c ×1
c++ ×1
gcc ×1
iphone ×1
localization ×1
lumberjack ×1
nsmenu ×1
nsmenuitem ×1
swift ×1
swift3 ×1
window ×1